我有一个方法可以根据用户输入创建 UTC DateTime
,使用他们地理位置的 GMT 偏移量:
public static DateTime LocalToUtc
(int year, int month, int day, int hour, decimal gmtOffset) {
// argument validation here
var dateTime = new DateTime(year, month, day).AddHours(hour);
var dateTimeOffset =
new DateTimeOffset(dateTime, TimeSpan.FromHours(gmtOffset));
return dateTimeOffset.UtcDateTime;
}
问题是如果用户时区是夏令时,这个功能会关闭一个小时。
因此,虽然我个人的 GMT 偏移量是 -8,但由于夏令时,当前时区偏移量是 -7。
如何更改上述函数以考虑夏令时?难道我不需要以某种方式根据 GMT 偏移量创建一些时区对象并获取其时区偏移量吗?
最佳答案
在不知道实际时区的情况下无法做到这一点:多个时区具有相同的基本 UTC 偏移量,但夏令时规则不同。例如,W。欧洲标准时间和W. Central Africa Standard Time 都具有 +01:00 的偏移量,但前者支持 DST 而后者不支持。所以偏移量不足以决定夏令时是否适用...
您的方法应该采用 TimeZoneInfo
参数而不是 gmtOffset
。这样,您只需使用 TimeZoneInfo.ConvertTime
方法来转换日期,它会自动将 DST 考虑在内。
关于c# - .NET:考虑夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811267/