2011-07-03 194 views
5

我不知道爲什麼這太複雜了!C#將UTC int轉換爲DateTime對象

我有一個傳遞一個長整型UTC的插件。我需要將該號碼轉換爲DateTime來查詢我的數據庫(SQL Server)。

我不知道爲什麼,但我無法從基本的谷歌搜索中找到可行的答案。

(對於額外的信用,我需要把我的返回DateTime回在一天結束時UTC)

這是尷尬不得不問這樣一個基本的問題! :)

+1

by * UTC int *,你的意思是自從時代以來的秒鐘? – bzlm

回答

19

我的猜測是,這將是自特定時期無論是毫秒或秒 - 很可能是1970年1月1日,午夜(UTC)的Unix紀元。

因此,代碼會看起來像:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 
                  DateTimeKind.Utc); 

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds) 
{ 
    return UnixEpoch.AddMilliseconds(milliseconds); 
} 

作出秒鐘明顯的變化,或從不同的時代:)

的另一種方法是創建秒/毫秒的TimeSpan自紀元,然後將其添加到紀元:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 
                  DateTimeKind.Utc); 

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds) 
{ 
    return UnixEpoch + TimeSpan.FromMilliseconds(milliseconds); 
} 

我不知道他們之間有任何顯着差異 - 儘管事實上AddMilliseconds需要double而不是long表明對於非常大的值,TimeSpan方法可能更可取。我懷疑它會做出任何區別,雖然:)

+1

謝謝!這正是我需要的。 –

9

int是你得到秒,毫秒,或什麼?將其轉換爲滴答後,(一個.NET滴答是100納秒),例如通過long ticks = theDBDateNum*TimeSpan.TicksPerMillisecond;,試試這個:

DateTime theDate = new DateTime(ticks, DateTimeKind.Utc); 
+1

這是假設一個與.NET相同的時代 - 這在我的經驗中似乎不太可能。 –

+0

是的。從時代開始秒數就過去了。 –