使用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个小时以获得GMT。今天的日期是2017年10月22日,所以它应该只增加四个小时。其次,10月29日当地凌晨1点,它改为增加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
我是否错误地使用了这些功能?
答案 0 :(得分:0)
我的坏。它按设计工作。事实证明,ConvertTime使用目标时区来应用更改规则,而不是源区域。
转换的正确方法是ConvertTimeToUtc()。
p.dtLocal的DateTimeKind未指定。
//p.dtGMT = TimeZoneInfo.ConvertTime(p.dtLocal, et, gmt);
p.dtGMT = TimeZoneInfo.ConvertTimeToUtc(p.dtLocal, et);