js和C# 時(shí)間日期格式轉(zhuǎn)換的簡(jiǎn)單實(shí)例
下午在搞MVC和EXTJS的日期格式互相轉(zhuǎn)換遇到了問(wèn)題,我們從.NET服務(wù)器端序列化一個(gè)DateTime對(duì)象的結(jié)果是一個(gè)字符串格式,如 '/Date(1335258540000)/' 這樣的字串。
整數(shù)1335258540000實(shí)際上是一個(gè)1970 年 1 月 1 日 00:00:00至這個(gè)DateTime中間間隔的毫秒數(shù)。通過(guò)javascript用eval函數(shù)可以把這個(gè)日期字符串轉(zhuǎn)換為一個(gè)帶有時(shí)區(qū)的Date對(duì)象,如下
用var date = eval('new ' + eval('/Date(1335258540000)/').source) 這樣即可得到一個(gè)JS對(duì)象
通過(guò)alert(date)查看比較清楚。
Tue Apr 24 17:09:00 UTC+0800 2012
上面是C# JSON序列化日期自動(dòng)得到的字符串,也可以通過(guò)C#寫一個(gè)函數(shù)來(lái)獲取這個(gè)數(shù)字,例如
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;
}
通過(guò)上面的函數(shù)跟利用JSON序列化獲取到的字符串中的整數(shù)是一樣的。
但是,在從客戶端返回服務(wù)器端的時(shí)候,日期卻遇到了問(wèn)題,如何將javascript的Date對(duì)象傳回服務(wù)器端呢?
先通過(guò)javascript Date中的getTime()來(lái)獲取到這個(gè)整數(shù),然后服務(wù)器端對(duì)這個(gè)整數(shù)進(jìn)行解析,‘構(gòu)造'成一個(gè)C#的DateTime對(duì)象。思路大概是這樣的,不過(guò)在逆向回去的時(shí)候卻遇到了點(diǎn)麻煩。
public DateTime ConvertTime(long milliTime)
{
long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 ;
return new DateTime(timeTricks);
}
通過(guò)ConvertTime得到的結(jié)果發(fā)現(xiàn)時(shí)間少了8個(gè)小時(shí),這剛好是服務(wù)器的時(shí)區(qū),東八區(qū)時(shí)間,也就是說(shuō)還要加上8小時(shí)的納秒,因?yàn)镃#的時(shí)間戳單位是一千萬(wàn)分之一秒,一個(gè)小時(shí)3600秒,即8*3600*10000000
所以修改了ConvertTime函數(shù),正確的如下:
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# 時(shí)間日期格式轉(zhuǎn)換的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C#時(shí)間格式轉(zhuǎn)換為時(shí)間戳的方法步驟
- C# string格式的日期時(shí)間字符串轉(zhuǎn)為DateTime類型的方法
- C# 當(dāng)前系統(tǒng)時(shí)間獲取及時(shí)間格式詳解
- C# DateTime.ToString根據(jù)不同語(yǔ)言生成相應(yīng)的時(shí)間格式
- C#Js時(shí)間格式化問(wèn)題簡(jiǎn)單實(shí)例
- C#日期時(shí)間格式化小結(jié)
- C#中時(shí)間的幾種格式轉(zhuǎn)換方法
- C#.net格式化時(shí)間字符串達(dá)到不同的顯示效果
- C#時(shí)間格式化(Datetime)用法詳解
- C#實(shí)現(xiàn)常見時(shí)間格式
相關(guān)文章
三步實(shí)現(xiàn)ionic3點(diǎn)擊退出app程序
這篇文章主要為大家詳細(xì)介紹了三步實(shí)現(xiàn)ionic3點(diǎn)擊退出app程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
JS倒計(jì)時(shí)實(shí)例_天時(shí)分秒
下面小編就為大家?guī)?lái)一篇JS倒計(jì)時(shí)實(shí)例_天時(shí)分秒。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
js將圖片轉(zhuǎn)base64的兩種實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于js將圖片轉(zhuǎn)base64的兩種實(shí)現(xiàn)方法,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-07-07
原生JS簡(jiǎn)單實(shí)現(xiàn)ajax的方法示例
這篇文章主要介紹了原生JS簡(jiǎn)單實(shí)現(xiàn)ajax的方法,結(jié)合實(shí)例形式分析了ajax的實(shí)現(xiàn)步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-11-11
微信小程序動(dòng)態(tài)評(píng)分展示/五角星展示/半顆星展示/自定義長(zhǎng)度展示功能的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序動(dòng)態(tài)評(píng)分展示/五角星展示/半顆星展示/自定義長(zhǎng)度展示的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于JS數(shù)組索引檢測(cè)中的數(shù)據(jù)類型問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

