当前位置:首页 > Windows程序 > 正文

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

2021-03-18 Windows程序

  昨天在学习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>需要转换的时间</param> /// <returns>Int64的数字时间</returns> public static Int64 Csharp2Json(DateTime time) { return Convert.ToInt64((time.Ticks - dt) / 10000); } /// <summary> /// 将Js/Java时间转换成C#时间 /// </summary> /// <param>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=http://www.mamicode.com/\d{13}/; var timeNum=paresInt(Tick.match(patt));//Tick为从C#获得的Json时间戳。这里是将获得的字符串转换成数字。 var d=new Date(timeNum); </script>

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/63063.html