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>

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM