c# 时区信息错误



使用 C# 内置函数从 ET 转换为 GMT 时,我遇到了一些异常。 该程序正在解析包含预计电力负载的美国东部时区日期戳的文件。 为了存储信息,东部时间将转换为 GMT。 代码片段为:

DateTime _date;
TimeZoneInfo et = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
TimeZoneInfo gmt = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

DateTime.TryParse(table[_r, 0], out _date);
p.dtLocal = _date;
p.dtGMT = TimeZoneInfo.ConvertTime(p.dtLocal, et, gmt);

首先,该函数向东部增加 5 小时以获得格林威治标准时间。 今天的日期是 2017 年 10 月 22 日,所以它应该只增加了四个小时。 其次,在当地时间 10 月 29 日凌晨 1:00,它更改为增加 4 小时。 此更改应在 2017 年 11 月 5 日之后在美国进行,之后应增加 5 小时。

(转换前)

dtGMT   {10/23/2017 12:00:00 AM} System.DateTime
dtLocal {10/23/2017 1:00:00 AM} System.DateTime

(转换后)

dtGMT   {10/23/2017 6:00:00 AM} System.DateTime
dtLocal {10/23/2017 1:00:00 AM} System.DateTime

我是否错误地使用了这些功能?

我的错。 它正在按设计工作。 事实证明,转换时间使用目标时区来应用更改规则,而不是源区域。

正确的转换方法是ConvertTimeToUtc()。

未指定 p.dtLocal 的 DateTimeKind 。

//p.dtGMT = TimeZoneInfo.ConvertTime(p.dtLocal, et, gmt);
p.dtGMT = TimeZoneInfo.ConvertTimeToUtc(p.dtLocal, et);

相关内容

  • 没有找到相关文章

最新更新