我有一个创建 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 偏移量,但夏令时规则不同。例如,西欧标准时间 and 中非西部标准时间两者的偏移量均为+01:00,但前者支持 DST,而后者不支持。所以偏移量不足以决定是否适用 DST...
你的方法应该采取TimeZoneInfo
参数而不是gmtOffset
。这样你就可以使用TimeZoneInfo.ConvertTime
转换日期的方法,它会自动考虑夏令时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)