【问题标题】:Is .NET DateTime buggy using ToString("U")?.NET DateTime 使用 ToString("U") 有问题吗?
【发布时间】:2012-07-06 21:20:33
【问题描述】:

我有下一个简单的代码...

Console.WriteLine(default(DateTime).Date.ToString("U"));

发出的文本是(我有一个西班牙语安装): "lunes, 01 de enero de 0001 3:00:00"

为什么它从 3 小时而不是 0 小时开始?是bug吗?

【问题讨论】:

  • 嗯,那是不是 DateTime.Now。为什么不向我们展示您的真实代码?
  • 您计算机上的当地时间是多少? Now 包括小时/分钟/秒,U 格式说明符也应如此。
  • 对不起,我简化了代码忘记放置 Date 属性(它只获取 Date 部分,没有时间)。

标签: .net datetime


【解决方案1】:

好吧,除非你有一台时间机器或者DateTime真的有问题,否则这不是你发布的代码的输出,它使用了DateTime.Now

我怀疑您的代码真的使用DateTime.MinValue(或new DateTime()),而您看到凌晨3点的原因是(如per the documentation):

图案与“F”图案相同。但是,DateTime 值在格式化之前会自动转换为 UTC。

所以我怀疑您所在的时区是当地时间 0001 年 1 月 1 日午夜是 UTC 时间凌晨 3 点。 (DateTimeZone.MinValue 的“种类”为 Unspecified,因此当被要求转换为 UTC 时将被视为本地。DateTime 是该区域周围的 bit of a mess。)

【讨论】:

  • 谢谢乔恩!我的错误:我想说“DateTime.Now.Date”,现在已在问题中解决。是的!我在一个 UTC - 4 的位置(我猜是冬季时间调整减少一小时)。
  • @NéstorSánchezA.:即使DateTime.Now.Date(更简单地写成DateTime.Today)也不应该是0001年1月1日。无论如何,很高兴现在一切都整理好了。
  • 我认罪了。收到的原始值是 DateTime 默认值。问题已更正。
猜你喜欢
  • 2010-10-22
  • 2021-12-19
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
相关资源
最近更新 更多