C# convert datetime to WCF datetime format
我用jsonnet解析具有datetime属性的c对象,然后将其发布到服务器。但它返回日期格式错误。它要求采用如下格式:
1 | "/Date(1327572000000-1000)/" |
如何将C日期时间转换为这种格式?
由于您询问了如何使用json.net序列化此格式:
1 2 3 4 5 6 7 8 9 | // 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); |
但是,我强烈建议您不要使用这种格式,除非您必须使用这种格式,通常是为了与旧代码兼容。对于JSON中的日期和时间,ISO-8601格式是首选(事实上的)格式。
另请参见:关于JSON日期的噩梦。
这就是WCF基本上如何序列化日期时间值(请注意,非UTC值包括有关当前时区的信息)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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); } } |
号