none
MVC用JSON传递时间,为啥在controller接收的时候发现少了8个小时? RRS feed

  • 问题

  • 本来是12点多的,传到另一边变成了4点多,请问该怎么改正?? student类里面的birthday属性为datetime类型

    服务器传递的是直接return Json(Student);

    而接收

    var studentReader= new StreamReader(Request.InputStream);
    var student= JsonHelper.FromJson<Student>(studentReader.ReadToEnd());

    JsonHelper里面的函数是:

    public static T FromJson<T>(this string json)
            {
             return JsonConvert.DeserializeObject<T>(json);
             }


    good good study,day day up.


    2013年5月26日 7:06

答案

  • 我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 '/Date(1335258540000)/' 这样的字串。

    整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数。通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下

    用var date = eval('new ' + eval('/Date(1335258540000)/').source) 这样即可得到一个JS对象

    通过alert(date)查看比较清楚。

    Tue Apr 24 17:09:00 UTC+0800 2012

    通过这刚好是服务器的时区,东八区时间,也就是说还要加上8小时的纳秒,因为C#的时间戳单位是一千万分之一秒,一个小时3600秒,即8*3600*10000000


    e-mail:ist_te@hotmail.com

    2013年5月27日 2:11
  • 主要的因素是在于JSON格式不直接支持日期和时间。

    详细请参考:http://blog.csdn.net/cncdns/article/details/6164389


    e-mail:ist_te@hotmail.com

    2013年5月28日 2:27

全部回复

  • 我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 '/Date(1335258540000)/' 这样的字串。

    整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数。通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下

    用var date = eval('new ' + eval('/Date(1335258540000)/').source) 这样即可得到一个JS对象

    通过alert(date)查看比较清楚。

    Tue Apr 24 17:09:00 UTC+0800 2012

    通过这刚好是服务器的时区,东八区时间,也就是说还要加上8小时的纳秒,因为C#的时间戳单位是一千万分之一秒,一个小时3600秒,即8*3600*10000000


    e-mail:ist_te@hotmail.com

    2013年5月27日 2:11
  • 我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 '/Date(1335258540000)/' 这样的字串。

    整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数。通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下

    用var date = eval('new ' + eval('/Date(1335258540000)/').source) 这样即可得到一个JS对象

    通过alert(date)查看比较清楚。

    Tue Apr 24 17:09:00 UTC+0800 2012

    通过这刚好是服务器的时区,东八区时间,也就是说还要加上8小时的纳秒,因为C#的时间戳单位是一千万分之一秒,一个小时3600秒,即8*3600*10000000


    e-mail:ist_te@hotmail.com


    如果服务器是在东七区,我在东九区,是不是获取的值要加上9个小时还是10个小时??

    good good study,day day up.

    2013年5月27日 16:12
  • 主要的因素是在于JSON格式不直接支持日期和时间。

    详细请参考:http://blog.csdn.net/cncdns/article/details/6164389


    e-mail:ist_te@hotmail.com

    2013年5月28日 2:27