将DateTime转换为ToString()的特定时区

时间:2017-06-21 05:42:28

标签: c# date datetime timezone format

DateTime值写入文本文件时,我必须确保使用的时区始终为UTC +01:00。格式为yyyy-MM-ddTHH:mm:sszzzzzz部分始终等于+01:00。这意味着,如果DateTime值不是UTC +01:00,则需要在写入输出之前进行转换。

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

来自the documentation

  

使用DateTime值," zzz"自定义格式说明符表示本地操作系统与UTC的时区的签名偏移量,以小时和分钟为单位。它不反映实例的System.DateTime.Kind属性的值。出于这个原因," zzz"建议不要将格式说明符与DateTime值一起使用。

相反,要么使用DateTimeOffset值(其中" zzz"执行您认为应该执行的操作),要么继续使用DateTime值,请使用{{3} }。

例如,在我的电脑上(位于美国太平洋时区):

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz")          // "2017-06-21T14:57:17-07:00"
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssK")            // "2017-06-21T14:57:17Z"
DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz")    // "2017-06-21T14:57:17+00:00"
  • 在第1行,即使时间是UTC时间,偏移量也会错误地显示当地时间。
  • 在第2行,K说明符选择UTC类型,并在结果中正确显示Z
  • 在第3行,zzz说明符正确传达零点偏移。

相关:the "K" specifier

答案 1 :(得分:0)

使用:

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz") 

将导致错误。 请尝试以下方法:

DateTime.**Now**.ToString("yyyy-MM-ddTHH:mm:sszzz")