2013-04-10 168 views
10

這是問題不是重複的,這個問題演示了一種轉換方法的問題,而不是如何執行轉換。閱讀完整的問題。將epoch/unix轉換爲日期時間

我有一個時間戳,我相信這是一個UNIX時間戳,使用下面的轉換器時,它正確地轉換郵票

價值:1365151714493

http://www.epochconverter.com/

我已經環顧四周,發現example關於如何將其轉換爲日期時間對象,並且該方法看起來很簡單,請創建一個日期時間對象並將日期設置爲1970年1月1日的夜晚,並將該值添加爲第二個:

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0).AddSeconds(Convert.ToDouble(unixTimeStamp)); 
} 

問題是每當我用上面的值調用這個mehod時,我得到的值超出範圍異常。

我是否需要先對值做任何事情?該字符串轉換爲雙精細確定。調用AddSeconds(double) methos當異常被拋出

+0

很確定時間標記以毫秒爲單位,不是_秒。編輯:除非......你知道......它應該代表未來4359年的日期。 – 2013-04-10 12:51:21

+0

這是如何複製?您提供的鏈接是詢問如何進行轉換。我在嘗試進行轉換時詢問有關問題! – 2013-04-10 13:06:52

回答

14

該時間戳(1365151714493)以毫秒爲單位,而不是秒。您需要除以1000或使用AddMilliseconds。如果將它看作秒,那麼未來的日期約爲4359年(粗略計算)。這超出DateTime的範圍,其中maxes out在當年10000,因此拋出ArgumentOutOfRangeException

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(unixTimeStamp)); 
} 

你可能也想考慮強迫它作爲V4Vendetta建議。另外,如果您希望混合使用格式(秒或毫秒),則對解析值進行快速大小檢查可能會比較謹慎。

+0

完全忽略了數值爲毫秒的可能性,因爲我閱讀的每篇文章都給出了時間戳的例子,以秒爲單位,我認爲給予的值是相同的。謝謝 – 2013-04-10 13:08:43

5

我想你應該嘗試它,因爲它是相對於GMT

而且從您提到它假定值是毫秒,而不是傳統的unix timestamp as in seconds網站

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
epoch = epoch.AddMilliseconds(yourvalue);// your case results to 4/5/2013 8:48:34 AM 
相關問題