DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> js和C# 時間日期格式轉換的簡單實例
js和C# 時間日期格式轉換的簡單實例
編輯:關於JavaScript     

下午在搞MVC和EXTJS的日期格式互相轉換遇到了問題,我們從.NET服務器端序列化一個DateTime對象的結果是一個字符串格式,如 '/Date(1335258540000)/' 這樣的字串。

整數1335258540000實際上是一個1970 年 1 月 1 日 00:00:00至這個DateTime中間間隔的毫秒數。通過javascript用eval函數可以把這個日期字符串轉換為一個帶有時區的Date對象,如下

用var date = eval('new ' + eval('/Date(1335258540000)/').source) 這樣即可得到一個JS對象

通過alert(date)查看比較清楚。

Tue Apr 24 17:09:00 UTC+0800 2012

上面是C# JSON序列化日期自動得到的字符串,也可以通過C#寫一個函數來獲取這個數字,例如

public long MilliTimeStamp(DateTime TheDate)
    {
      DateTime d1 = new DateTime(1970, 1, 1); 
      DateTime d2 = TheDate.ToUniversalTime();
      TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
      return (long)ts.TotalMilliseconds;
    } 

通過上面的函數跟利用JSON序列化獲取到的字符串中的整數是一樣的。

但是,在從客戶端返回服務器端的時候,日期卻遇到了問題,如何將javascript的Date對象傳回服務器端呢?

先通過javascript Date中的getTime()來獲取到這個整數,然後服務器端對這個整數進行解析,‘構造'成一個C#的DateTime對象。思路大概是這樣的,不過在逆向回去的時候卻遇到了點麻煩。

public DateTime ConvertTime(long milliTime)
    {
      long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 ;
      return new DateTime(timeTricks);
    }

通過ConvertTime得到的結果發現時間少了8個小時,這剛好是服務器的時區,東八區時間,也就是說還要加上8小時的納秒,因為C#的時間戳單位是一千萬分之一秒,一個小時3600秒,即8*3600*10000000

所以修改了ConvertTime函數,正確的如下:

public DateTime ConvertTime(long milliTime)
    {
      long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 + TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours * 3600 * (long)10000000;
      return new DateTime(timeTricks);
    }

以上這篇js和C# 時間日期格式轉換的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved