C#时间戳与json时间戳的转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#时间戳与json时间戳的转换相关的知识,希望对你有一定的参考价值。
昨天在学习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时间戳的转换的主要内容,如果未能解决你的问题,请参考以下文章