我想在unix時間獲得GMT。我使用下面的代碼:在C#中的Unix時間轉換
public static long GetGMTInMS()
{
var unixTime = DateTime.Now.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)unixTime.TotalMilliseconds;
}
要那麼UNIX時間轉換回DatTime對象,我用這個:
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
當我運行它時,GetGMTInMS()
1320249196267
。當我通過它UnixTimeStampToDateTime()
我得到{11/2/2011 11:53:16 AM}
這是好的。這是我運行代碼時的正確時間。我遇到的問題是,當我嘗試將1320249196267
放入unix時間轉換器(例如this)時,它會返回完全錯誤的時間。
另一個問題,我是在東部時區。這返回了我的時區。這是DateTime
對象處理的事情,還是我沒有得到GMT?
返回的類型應該是'ulong'而不是很長,因爲UNIX時間戳不能爲負數? –
@ErikSchierboom:那取決於 - 有很多情況下,「自Unix時代以來的秒數」或「自Unix時代以來的毫秒數」被用於*可能爲負數的情況。鑑於'long.MaxValue'秒的時間距離很遠,我認爲在1970年之前變得更靈活並接受負值是更合理的。 –
好吧,我明白了!感謝您的解釋。 –