如果我有这段代码:
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"
发生了什么事?
答案 0 :(得分:5)
那是因为documentation说(强调我的):
使用
DateTime
值时,“zz”自定义格式说明符表示 签署本地操作系统时区与UTC的偏移量, 以小时计。它不反映实例的价值DateTimeKind
属性。因此,“zz”格式说明符是 不建议与DateTime
值一起使用。
因此,zz
格式说明符始终输出本地时区的UTC偏移量,即使用于格式化UTC时间也是如此。
答案 1 :(得分:0)
DateTime.ToString
,当您未将CultureInfo
传递给它时,默认为当前文化。如果您当前的文化是+10,那么这就解释了为什么你看到+10。您可以打开各种FxCop和代码分析规则,以便在没有ToString
CultureInfo
时向您发出警告