【问题标题】:Convert DateTime To JSON DateTime将日期时间转换为 JSON 日期时间
【发布时间】:2013-09-20 04:22:57
【问题描述】:

我有一个返回 DateTime 字段的 WebService。

我得到一个结果/Date(1379048144000)/ 但是

我只想要1379048144000 我怎样才能做到这一点。

[WebMethod]
public DateTime GetServerDate()
{
    return DateTime.Now;
}

通过设置Header Content-Type: application/json;字符集=utf-8;我得到了类似/Date(1379048144000)/ 的结果。

【问题讨论】:

    标签: c# .net json web-services


    【解决方案1】:

    您可以更改您的 WS 以返回带有 DateTime 值的 long。返回的值是自 Unix 纪元 (01/01/1970) 以来的毫秒数。这可以通过DateTime 上的扩展方法来完成,例如:

    public static class DateTimeExtensions
    {
        ...
        private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);
    
        public static long ToUnixTime(this DateTime dateTime)
        {
            return (dateTime - UnixEpoch).Ticks / TimeSpan.TicksPerMillisecond;
        }
        ...
    }
    

    您的网络服务方法可能类似于:

    public long GetMyDate(...)
    {
        DateTime dateTime = ...;
        return dateTime.ToUnixTime();
    }
    

    【讨论】:

    【解决方案2】:

    Json.NET

    string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);    
    

    【讨论】:

      【解决方案3】:

      在客户端,您可以使用此功能向客户显示正确的日期(我在我的项目中使用它):

      function parseJsonDate(jsonDate) {
      var offset = new Date().getTimezoneOffset() * 60000;
      var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
      if (parts[2] == undefined) parts[2] = 0;
      if (parts[3] == undefined) parts[3] = 0;
      d = new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
      date = d.getDate() + 1;
      date = date < 10 ? "0" + date : date;
      mon = d.getMonth() + 1;
      mon = mon < 10 ? "0" + mon : mon;
      year = d.getFullYear();
      return (date + "." + mon + "." + year);
      };
      

      这个函数是返回正确的日期格式:dd.mm.yyyy,但是如果你需要,你可以改变它。希望能帮到你。

      【讨论】:

      • 我相信你应该改变:date = d.getDate() + 1;至:日期 = d.getDate();
      • 我得到的日期为:“\/Date(1476775277500)\/”。这个解决方案也对我有用,谢谢! , 能够转换为正确的 js 日期
      【解决方案4】:

      在将 JSON 对象中的日期发送到 JS 时,您总是可以通过如下转换日期来解决您的问题:

      var myJSDate = (new Date(parseInt(obj.MyDate.substr(6)))).toJSON();
      

      其中 obj.Date 包含您要格式化的日期。

      然后你会得到这样的东西:“2013-10-25T18:04:17.289Z”

      你可以随时在 Chrome 控制台中检查它:

      (new Date()).toJSON();
      

      希望这会有所帮助!

      【讨论】:

        【解决方案5】:

        只需像这样编写,即可将您的日期字符串转换为 JSON 格式。

        date = "{" + date + "}";
        

        【讨论】:

          【解决方案6】:

          有两种解决方案:

          1. 客户端:

          function ToJavaScriptDate(value) {
            var pattern = /Date\(([^)]+)\)/;
            var results = pattern.exec(value);
            var dt = new Date(parseFloat(results[1]));
            return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
          }

          也可能需要转换成数据对象 var date = new Date(xxx)

          1. 服务器端:

            Newtonsoft.Json.JsonConvert.SerializeObject(your_object)
            

          【讨论】:

            【解决方案7】:

            尝试正则表达式:

            var jsonDate = @"/Date(1379048144000)/"; 
            var regex = /-?\d+/; 
            var jsonDate = re.exec(jsonDate); 
            var dateOriginal = new Date(parseInt(m[0]));
            

            【讨论】:

            • 我正在返回 DateTime 并且返回为 /Date(1379048144000)/ 我在该 c# 代码中没有'/Date(1379048144000)/' 它只是在通过 json post 调用时响应
            • 那么你想在哪里解析? javascript?服务器端?
            • 我只想通过服务器端c#返回1379048144000
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-07-06
            • 2014-07-01
            • 1970-01-01
            • 2017-08-29
            • 2011-07-05
            相关资源
            最近更新 更多