【问题标题】:Why does DateTime.ToString not give timezone as expected为什么 DateTime.ToString 没有按预期提供时区
【发布时间】:2013-04-07 21:08:13
【问题描述】:

如果我有这个代码:

                DateTime dt = DateTime.UtcNow;
                string sDate = dt.ToString("yyyy-MM-dd HH:mm:ss.fff zz");

我的 sDate 如下所示:

"2013-04-07 21:05:15.396 +10"

这是当前的 UTC 日期时间(晚上 9:05),但末尾有一个“+10”,这是我的本地时区。

我早就料到了:

"2013-04-07 21:05:15.396 +00"

发生了什么事?

【问题讨论】:

  • 查看 DateKind 属性。
  • Kind 是 UTC,这是我所期望的,因为我已经调用了 DateTime.UtcNow
  • @frenchie UtcNow 始终将 Kind 设置为 DateKind.Utc
  • @PeterRitchie:好的,很高兴知道。刚刚发布了该评论,因为我认为它可能会有所帮助。

标签: c# datetime datetime-format


【解决方案1】:

那是因为documentation 说(强调我的):

对于DateTime 值,“zz”自定义格式说明符表示 本地操作系统时区与 UTC 的有符号偏移量, 以小时为单位。它不反映实例的价值 DateTimeKind 属性。 因此,“zz”格式说明符为 不建议与 DateTime 值一起使用。

因此,zz 格式说明符始终输出您当地时区的 UTC 偏移量,即使用于格式化 UTC 时间也是如此。

【讨论】:

  • 谢谢,这看起来像答案。这似乎非常违反直觉。
【解决方案2】:

DateTime.ToString,当您不向其中传递CultureInfo 时,默认为当前文化。如果您当前的文化是 +10,那么这就解释了为什么您会看到 +10。当您在没有 CultureInfo 的情况下调用 ToString 时,您可以打开各种 FxCop 和代码分析规则来警告您

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2018-04-06
    • 2020-12-31
    • 2019-08-14
    • 2011-08-28
    • 2014-08-04
    相关资源
    最近更新 更多