2011-03-05 57 views
10

我需要將DateTime轉換爲Unix時間戳。所以我googled它尋找一些示例代碼爲什麼DateTime到Unix時間使用double而不是整數?

在幾乎所有的結果我看到,他們使用double作爲回報,這樣的功能,即使在明確使用floor將其轉換爲整數。 Unix時間戳總是整數。那麼使用long還是int而不是double會出現什麼問題?

static double ConvertToUnixTimestamp(DateTime date) 
{ 
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    TimeSpan diff = date - origin; 
    return Math.Floor(diff.TotalSeconds); 
} 
+0

恕我直言只是不驗證輸入日期。它應該返回一個長或特殊的結構 – onof

+1

沒有理由,它只是不好的代碼。投到很長時間,它不能溢出。 –

+0

根據定義,我將補充一點,Unix時間戳是UTC。該方法應檢查DateTime.Kind是否爲UTC,本地或未指定。至少如果本地我將轉換爲UTC,然後再執行轉換。或者,如果您想要一個本地的Unix時間戳,則可以添加一個重載或參數以不執行到UTC的轉換。 – Nate

回答

3

通常,我會用一個無符號長整型實現它,而不是要求用戶向上或向下舍入和投射到一個int或long。有人可能需要加倍的一個原因是,如果使用類似於timeval的結構,如gettimeofday。它允許亞秒精度...

3

要避免32位系統上的2038錯誤?

+7

有人會認爲他們可能只用了很長時間。 – nos

1

雙打覆蓋更多的地面,然後在int類型的任何其他變量。

+0

是的,但是「長」可以涵蓋數千年。當然,我的軟件在幾千年內不會運行。 – Earlz

+0

我想如果你有一些需要計算未來或過去的東西的軟件,它可能會有所幫助。這是一個特殊情況,並且可能會在所述場景下使用自定義數據類型。 – Nate

-1

這不是「年」的問題。但在合理的機器上工作數小時,正確連接。

但你能想象整理巨大的存儲?我有大約30TB的數據,它讓我陷入困境 - 我花的時間比實際工作多。

祝你好運

相關問題