2012-07-28 57 views
0

我正在使用.NET來生成一個JSON文件,其中有很多Date如何在.Net中獲得javascript的Date.parse()?

對於壓縮,我想將它們存儲爲1970年1月1日以來的毫秒,而不是字符串,然後將它們轉換爲Javascript日期。但由於1970-01-01毫秒。NET的理念不相符的Javascript:

的Javascript:

Date.parse("2012-05-15T13:57:57.0000000+00:00") 
1337090277000 

VB.Net:

Date.Parse("2012-05-15T13:57:57.0000000+00:00").Subtract(New Date(1970,1,1)).TotalMilliseconds 
1337101077000.0 

不同的是10800秒。 1970-01-01的差值爲0,隨時間變化。

有沒有一種方法可以從.Net內部計算Javascript的時間毫秒以來的想法?

+0

的差異爲3小時完全一樣。也許最初的時間來自不同的時區?當然是Oy, – JConstantine 2012-07-28 13:09:04

回答

4

你正在比較蘋果和橘子。

這正是你會得到在JavaScript是什麼以及在UTC + 3(以色列)時:

Date.parse("2012-05-15T13:57:57.0000000+00:00") - new Date(1970,1,1) 
//1334419077000 

這是因爲當你在javascript做new Date,這是根據機器的時區。它看起來像vb.net是一樣的。


你會得到正確的數量在JavaScript與:

Date.parse("2012-05-15T13:57:57.0000000+00:00") - Date.UTC(1970,1,1) 
//1334411877000 

在VB.net

Dim a As Date 
    a = Date.Parse("2012-05-15T13:57:57.0000000+00:00").ToUniversalTime() 
    Dim b As Date 
    b = New Date(1970, 2, 1, 0, 0, 0, DateTimeKind.Utc) 
    a.Subtract(b).TotalMilliseconds 
    '1334411877000 Same as javascript 
    'Note that in javascript, month as 1 is same as 2 in VB.net because months start at 0 in javascript 
+0

!用DateTimeOffset替換日期毫無疑問地解決了我的問題。我不喜歡給Date構造函數一個時區。 – Eyal 2012-07-28 13:36:09

+0

@Eyal你爲什麼想要這樣做?這是不必要的移動部分。 UTC始終是相同的。 – Esailija 2012-07-28 13:38:06

+0

您的最終答案的輸出不是1334411877000.0,它是1337101077000.?Date.Parse(「1970-01-01T00:00:00.0000000 + 00:00」)。Subtract(New Date(1970,1,1,0,0) ,0,DateTimeKind.Utc))。順便提一下,TotalMilliseconds是72000000. VB.Net的Date.Parse()忽略了時區。 – Eyal 2012-07-28 14:13:14