【发布时间】:2021-02-22 22:19:41
【问题描述】:
我的数据库中有以下值:637406344505540000,它代表 UTC 时间。
当我运行这行代码时。
return new DateTime(ticks, DateTimeKind.Local); // it returns 11/10/2020 7:47:30 PM
我尝试将 Kind 设置为 UTC 它返回相同。
这是我在 Visual Studio 的即时窗口中执行的结果
new DateTime(637406344505540000, DateTimeKind.Local);
{11/10/2020 7:47:30 PM}
Date: {11/10/2020 12:00:00 AM}
Day: 10
DayOfWeek: Tuesday
DayOfYear: 315
Hour: 19
Kind: Local
Millisecond: 554
Minute: 47
Month: 11
Second: 30
Ticks: 637406344505540000
TimeOfDay: {19:47:30.5540000}
Year: 2020
new DateTime(637406344505540000, DateTimeKind.Utc);
{11/10/2020 7:47:30 PM}
Date: {11/10/2020 12:00:00 AM}
Day: 10
DayOfWeek: Tuesday
DayOfYear: 315
Hour: 19
Kind: Utc
Millisecond: 554
Minute: 47
Month: 11
Second: 30
Ticks: 637406344505540000
TimeOfDay: {19:47:30.5540000}
Year: 2020
在我看来,对于 Kind local,它应该返回以下内容: 2020 年 11 月 10 日星期二 14:47:30 GMT-0500(东部标准时间)
有一个网络工具可以帮助我理解我的价值是正确的。
https://grammarofdev.blogspot.com/2017/02/c-ticks-to-datetime.html
它显示了与我的数据库中的刻度相对应的本地和 UTC 值。
有什么我做的不对吗?
【问题讨论】:
-
试试
new DateTime(637406344505540000, DateTimeKind.Local).ToString("o"),你会看到Local和Utc之间的区别。 -
如果您对
DateTime谎报该值是UTC 还是本地,那么您会得到不正确的结果。由于该值存储为 UTC,因此您需要以相同的方式对其进行反序列化。使用ToLocalTime()转换为当地时间。见重复。更好的是,停止使用DateTime,而改用DateTimeOffset,它具有更好的内置时区处理功能。或使用 Noda(第三方日期/时间库)。
标签: c# .net datetime timestamp