2017-07-05 236 views
2

我解析具有JsonNet的DateTime属性的c#对象,然后将其发布到服务器。但它返回日期格式错误。它要求与这样的格式:C#将日期时间转换为WCF日期时间格式

"/Date(1327572000000-1000)/" 

如何将c#日期时间转换为这种格式?

+0

请参见[这个答案](https://stackoverflow.com/a/ 1016908) – Arman

+2

@Arman C#和Javascript是不同的 –

+2

糟糕,我复制了错误的链接,对此表示歉意。我的意思是这个[https://stackoverflow.com/a/18821102](https://stackoverflow.com/a/18821102)。 – Arman

回答

4

既然你问到如何使用JSON.NET这种格式序列:

// Set the DateFormatHandling wherever you are configuring JSON.Net. 
// This is usually globally configured per application. 
var settings = new JsonSerializerSettings 
{ 
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat 
}; 

// When you serialize, DateTime and DateTimeOffset values will be in this format. 
string json = JsonConvert.SerializeObject(yourDateTimeValue, settings); 

不过,我强烈建议您不要使用此格式,除非你绝对必须的,通常与旧代码的兼容性的目的。 ISO-8601格式是JSON日期和时间的首选(事实上)格式。

另请参阅:On the nightmare that is JSON Dates

+0

谢谢。是的,我正在使用非常旧的API –

0

这是WCF本质上是如何序列化DateTime值(注意,非UTC值包括关于当前时区信息)

public static string MsJson(DateTime value) 
{ 
    long unixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks; 
    long ticks = (value.ToUniversalTime().Ticks - unixEpochTicks)/10000; 

    if (value.Kind == DateTimeKind.Utc) 
    { 
     return String.Format("/Date({0})/", ticks); 
    } 
    else 
    { 
     TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(value.ToLocalTime()); 
     string sign = ts.Ticks < 0 ? "-" : "+"; 
     int hours = Math.Abs(ts.Hours); 
     string hs = (hours < 10) 
      ? "0" + hours 
      : hours.ToString(CultureInfo.InvariantCulture); 
     int minutes = Math.Abs(ts.Minutes); 
     string ms = (minutes < 10) 
      ? "0" + minutes 
      : minutes.ToString(CultureInfo.InvariantCulture); 
     return string.Format("/Date({0}{1}{2}{3})/", ticks, sign, hs, ms); 
    } 
} 
相关问题