【问题标题】:Convert DateTime to specific timezone for ToString()将 DateTime 转换为 ToString() 的特定时区
【发布时间】:2017-11-23 20:38:09
【问题描述】:

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

最好的方法是什么?

【问题讨论】:

  • 您对所讨论的DateTime 了解多少?如果不知道它的偏移量,就无法表示特定偏移量的瞬间……

标签: c# date datetime timezone format


【解决方案1】:

使用:

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

会导致错误。 请改用这个:

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

【讨论】:

    【解决方案2】:

    来自the documentation

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

    相反,要么使用DateTimeOffset 值(其中“zzz”按照您的想法执行),或者如果您继续使用DateTime 值,则使用the "K" specifier

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

    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 说明符正确传达。

    相关:https://stackoverflow.com/a/31223893/634824

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多