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时间戳的转换的主要内容,如果未能解决你的问题,请参考以下文章

php怎么将指定日期转换为时间戳

C#时间戳的简单实现

带有时间戳的 postgreSQL 排序

java 时间戳与日期字符串相互转换

Unity中实现时间戳与C#时间互转

Unity中实现时间戳与C#时间互转