【问题标题】:C# convert datetime to WCF datetime formatC# 将日期时间转换为 WCF 日期时间格式
【发布时间】:2017-12-09 14:01:23
【问题描述】:

我使用 JsonNet 解析具有 DateTime 属性的 c# 对象,然后将其发布到服务器。但它返回日期格式错误。它要求采用如下格式:

"/Date(1327572000000-1000)/"

如何将 c# DateTime 转换为这种格式?

【问题讨论】:

标签: c# json wcf json.net


【解决方案1】:

既然您问过如何使用 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

【讨论】:

    【解决方案2】:

    这就是 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2011-05-30
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多