TimeZoneInfo.ConvertTimeFromUtc 返回了错误的日期时间

TimeZoneInfo.ConvertTimeFromUtc returned wrong DateTime

我调用了方法:

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

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

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

DateTime.Now.ToUniversalTime() 已经返回 UTC,您不需要再将 转换为 UTC。

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

更新:哦,"GMT standard Time" 不是 "Greenwich mean time"。

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"))