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

本文关键字:时区 DateTime ToString 为什么 | 更新日期: 2023-09-27 18:07:50

如果我有这样的代码:

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

my sDate看起来像这样:

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

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

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

怎么回事?

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

这是因为文档说(强调我的):

对于DateTime值,"zz"自定义格式说明符表示本地操作系统时区与UTC的带符号偏移量,以小时计算。它不反映实例的值DateTimeKind财产。因此,"zz"格式说明符是不建议与DateTime值一起使用。

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

DateTime.ToString,当您不传入CultureInfo时,默认为当前区域性。如果你当前的文化是+10,那么这就解释了为什么你会看到+10。当你调用ToString而没有CultureInfo

时,你可以打开各种FxCop和代码分析规则来警告你