2011-04-12 87 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