2011-04-12 82 views
2

我得到了一些奇怪的結果:C#與怪日期時間

Console.WriteLine(new DateTime(1296346155).ToString()); 

結果是:

01.01.0001 0時02分09秒

但是這是不對的!

我從某個文件解析了值1296346155。它說它是UTC;

請解釋;)

謝謝大家幫忙)))

+1

它可能是Unix時間。試試這個:http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa – Kobi 2011-04-12 10:31:00

+0

什麼是一些文件?我猜測它是在使用1601年1月1日(UTC)作爲其偏移量的WIN32 FileTime中,而不是Jan1,0001。 – 2011-04-12 10:32:58

回答

5

DateTime預期「日期和時間以公曆日期00:00:00.000的0001年1月1日以來經過的100納秒間隔的數量表示。」 (從msdn

This question顯示瞭如何將unix時間戳轉換爲DateTime。

+0

謝謝你的鏈接;) – Edward83 2011-04-12 10:42:18

4

接受long類型期待ticks價值,而不是秒,甚至毫秒,而不是從1/1/1970像其他的日期時間的構造!語言。

所以1296346155滴答is 129 seconds

+0

這是2分鐘和9秒:-) – 2011-04-12 14:24:06

2

這是正確的 - 你期待它是什麼?爲什麼?

構造函數System.DateTime(Int64)從0001年1月1日起(公曆日期)採用100納秒間隔的數量(稱爲Ticks)。

因此,1296346155/10000000給出了秒數129.6。

因此,本應在1月1日顯示自午夜2分9秒0001

3

如果是Unix時間,那麼下面應該會產生預期的結果;

DateTime baseTime = new DateTime(1970, 1, 1, 0, 0, 0); 
Console.WriteLine(baseTime.AddSeconds(1296346155)); 

有關更多信息,請參閱Unix Time

3

構造函數不是你想要的,因爲時間不是用滴答聲測量的。

DateTime start = new DateTime(1970,1,1,0,0,0,0); 
start = start.AddSeconds(1296346155).ToLocalTime(); 
Console.WriteLine(start); 
// You don't need to use ToString() in a Console.WriteLine call