C# 与 DateTime 很奇怪

发布于 2024-10-31 14:51:13 字数 261 浏览 6 评论 0原文

我得到了一些奇怪的结果:

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

结果是:

01.01.0001 0:02:09

但这是不对的!

我从某个文件中解析了值 1296346155 。它说是UTC;

请解释一下;)

谢谢您的帮助!)))

I got some strange result for:

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

Result is:

01.01.0001 0:02:09

But it is not right!

I parsed value 1296346155 from some file. It said that it is in UTC;

Please explain;)

Thank you for help!)))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

怪我入戏太深 2024-11-07 14:51:13

DateTime 需要“以 100 纳秒间隔数表示的日期和时间,该间隔自公历 0001 年 1 月 1 日 00:00:00.000 起经过”。 (来自msdn

此问题展示了如何将 unix 时间戳转换为 DateTime。

DateTime expects "A date and time expressed in the number of 100-nanosecond intervals that have elapsed since January 1, 0001 at 00:00:00.000 in the Gregorian calendar." (from msdn)

This question shows how you can convert a unix timestamp to a DateTime.

只为一人 2024-11-07 14:51:13

接受 long 类型的 DateTime 构造函数需要 ticks 值,而不是秒甚至毫秒,也不是来自 1/1/1970 的值,如其他语言。

因此 1296346155 刻度是 129 秒

The constructor for DateTime that accept long type is expecting ticks value, not seconds or even milliseconds, and not from 1/1/1970 like in other languages.

So 1296346155 ticks is 129 seconds.

記憶穿過時間隧道 2024-11-07 14:51:13

如果是 Unix 时间,那么以下应该会产生预期的结果;

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

有关详细信息,请参阅 Unix 时间

If it's Unix time, then the following should yield the expected result;

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

See Unix Time for more information.

夜吻♂芭芘 2024-11-07 14:51:13

该构造函数不是您想要的,因为时间不是以滴答为单位测量的。

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

That constructor is not what you want as the time is not measured in ticks.

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
断肠人 2024-11-07 14:51:13

我发现以下主题,其中 unix 时间戳(您拥有的时间戳)和 .Net DateTime 之间存在转换

如何将 Unix 时间戳转换为 DateTime,反之亦然?

Ive found the following subject where there is a conversion between unix timestamp (the one you have) and .Net DateTime

How to convert a Unix timestamp to DateTime and vice versa?

无妨# 2024-11-07 14:51:13

这是正确的 - 您期望它是什么以及为什么?

构造函数System.DateTime(Int64)采用100纳秒的数字自 0001 年 1 月 1 日(公历)以来的间隔(称为“刻度”)。

因此,1296346155 / 10000000 给出的秒数是 129.6。

因此,这应该显示自 0001 年 1 月 1 日午夜以来 2 分 9 秒。

That is correct - what were you expecting it to be and why?

The constructor System.DateTime(Int64) takes the number of 100-nanosecond intervals (known as Ticks) since January 1st 0001 (in the Gregorian calendar).

Therefore, 1296346155 / 10000000 gives you the number of seconds, which is 129.6.

Therefore, this should display 2 minutes and 9 seconds since midnight on 1st January 0001.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文