码迷,mamicode.com
首页 > Windows程序 > 详细

C#时间戳与json时间戳的转换

时间:2016-06-10 14:59:24      阅读:1712      评论:0      收藏:0      [点我收藏+]

标签:

  昨天在学习asp.net的时候,视频里面提到一个问题,那就是Json时间和C#时间的转换。之所以需要进行这种转换,是由于C#起算时间是从1年1月1日 0:00:00开始,而js则是从1970年1月1日0:00:00开始,这导致在两种语言在时间的转换上差异。再加上将DateTime类型的数据转换成Json的时候会带有“/Date(.......)”这样的标记,所以对数据进行转换成为了必然。

  转换的方式无非两种,一种在后台通过C#装换成数字字符串然后Request给浏览器再进行进一步的解析。另一种则是将全部数据都直接发给浏览器通过js处理获得。

一、C#预处理

        在翻查网上的资料后,发现C#的最小计时单位为Tick=100ns,而js则为1ms,两者相差了10000倍。转换时需要注意。而js返回的时间戳传到C#时是不带时区的,所以js转换成C#时间的时候还需要注意本地化。
如下为代码:
        private static Int64 dt = new DateTime(1970, 1 , 1).Ticks;

        /// <summary>
        /// 传入一个DateTime,将其转换为子1970年1月1日起的Int64的数字
        /// </summary>
        /// <param name="time">需要转换的时间</param>
        /// <returns>Int64的数字时间</returns>
        public static Int64 Csharp2Json(DateTime time)
        {

            return Convert.ToInt64((time.Ticks - dt) / 10000);
        }
        /// <summary>
        /// 将Js/Java时间转换成C#时间
        /// </summary>
        /// <param name="jsTime">js/Java时间</param>
        /// <example>"1335258540000"</example>
        /// <returns></returns>
        public static DateTime Json2Csharp(string jsTime)
        {
            Int64 longTime = Convert.ToInt64(jsTime) * 10000;
           return new DateTime(longTime+=dt).ToLocalTime();
        }    

   上面的代码已包含C# to Js和Js to C#两部分。在前端,我面只需通过下的代码就可以将C#的时间戳转换成具体的时间:

var date=new Date(CsharpTimeTick);

   二、直接通过js处理

  C#的DateTime被转换成json后,默认格式是这样的: "/Date(1294499956278+0800)/",要转换这种格式的时间,我只要取回中间的“1294499956278”然后直接调用Date() 函数转换即可。

<script type="text/javascriopt>
        var patt=/\d{13}/;
        var timeNum=paresInt(Tick.match(patt));//Tick为从C#获得的Json时间戳。这里是将获得的字符串转换成数字。
        var d=new Date(timeNum);
</script>

 

  

C#时间戳与json时间戳的转换

标签:

原文地址:http://www.cnblogs.com/Witta/p/5573619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!