【问题标题】:TimeZoneInfo.ConvertTimeFromUtc returned wrong DateTimeTimeZoneInfo.ConvertTimeFromUtc 返回错误的 DateTime
【发布时间】:2018-12-21 21:23:31
【问题描述】:

我调用了方法:

TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))  // UTC+0

返回的 DateTime 比正确的 DateTime 大一小时。 为什么?它将如何修复?

返回值应该等于 DateTime.Now.ToUniversalTime()

【问题讨论】:

  • 如果您需要转换大量日期,您可能需要查看nodatime.org

标签: c# .net datetime timezone utc


【解决方案1】:

UTC 等于 GMT。但由于夏季,目前我们处于 BST,即 GMT + 1。GMT Standard Time 会自动调整夏令时。如果您不想针对夏令时进行调整,请使用 Greenwich Standard Time,而不是 GMT Standard Time

编辑:您所要做的就是将GMT Standard Time 更改为Greenwich Standard Time(见下文)

TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Greenwich Standard Time"))

【讨论】:

  • 我将如何转换为 GMT?请给出示例代码。
【解决方案2】:

DateTime.Now.ToUniversalTime() 已重新调整 UTC,您无需将其再次转换为 UTC。

提示:如果您真的只需要 UTC,请使用 DateTime.UtcNow,那么您根本不必关心时区以及您的本地时区可能是什么。

更新:哦,“GMT 标准时间”不是“格林威治标准时间”。

【讨论】:

  • 这段代码遇到了一个方法。时区是方法的参数。
猜你喜欢
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多