为什么DateTime.ToString没有按预期给出时区

时间:2013-04-07 21:08:14

标签: c# datetime datetime-format

如果我有这段代码:

                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"

发生了什么事?

2 个答案:

答案 0 :(得分:5)

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

  

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

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

答案 1 :(得分:0)

DateTime.ToString,当您未将CultureInfo传递给它时,默认为当前文化。如果您当前的文化是+10,那么这就解释了为什么你看到+10。您可以打开各种FxCop和代码分析规则,以便在没有ToString

的情况下致电CultureInfo时向您发出警告