这只是一个猜测,因为您没有显示任何代码。(请在您的问题中显示代码,这样更容易提供帮助!)
德克萨斯州目前处于中部标准时间,即 UTC-6。由于您报告的时间(1500、2100)之间有 6 小时的差异,我的猜测是您以某种方式转换了两次。
.Kind
这在正常情况下不应该发生,这要归功于DateTime
. 例如:
DateTime dt1 = new DateTime(2013, 11, 22, 3, 0, 0, DateTimeKind.Utc);
Debug.WriteLine("{0:HH:mm} ({1})", dt1, dt1.Kind); // 3:00 (Utc)
DateTime dt2 = dt1.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt2, dt2.Kind); // 21:00 (Local)
DateTime dt3 = dt2.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt3, dt3.Kind); // 21:00 (Local)
但是,如果您不知何故丢失了这种类型并将其设置回“未指定”,则可能会发生双重转换:
DateTime dt1 = new DateTime(2013, 11, 22, 3, 0, 0, DateTimeKind.Utc);
Debug.WriteLine("{0:HH:mm} ({1})", dt1, dt1.Kind); // 3:00 (Utc)
DateTime dt2 = dt1.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt2, dt2.Kind); // 21:00 (Local)
// somehow, the kind is getting set back to unspecified in your code
dt2 = DateTime.SpecifyKind(dt2, DateTimeKind.Unspecified);
DateTime dt3 = dt2.ToLocalTime();
Debug.WriteLine("{0:HH:mm} ({1})", dt3, dt3.Kind); // 15:00 (Local)
现在,您实际上不太可能调用DateTime.SpecifyKind
. 相反,我会在您的代码中查找您将本地时间而不是 UTC 时间存储回数据库的某个地方。
或者可能是您将本地转换为字符串并通过解析该字符串将DateTime
其读回另一个。DateTime
这可能发生在 UI 代码中。Local
在表单上从用户那里收集信息时,您可能需要指定种类?
您应该调试您的代码并逐步执行,以便您可以看到它是如何被转换的。我想你会找到答案的。
不,2013 年 8 月的 Windows 时区更新中没有发生任何会影响美国的事情。美国的最后一次 DST 更改是在 2007 年。即便如此,您也会提前 1 小时,而不是 6 小时。