c# - .NET:考虑夏令时

标签 c# .net datetime localization

我有一个方法可以根据用户输入创建 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/

相关文章:

swift - Swift 中月份和星期的名称

c# - 动态 LINQ GroupBy 多列

c# - 奇怪的异常行为......为什么?

ASP.NET AJAX 进度条 : Update from Code Behind?

c# - 确定目录中的文件数

javascript - 使用Javascript将字符串(日期格式)转换为日期时间

python导入datetime模块的问题

c# - Windows Phone 中的 System.Collections.Generic.KeyNotFoundException

c# - 如何仅将 "\"和 "\\"替换为 XML 中的特定标记?

c# - 默认情况下,查询字段提升权重的最小值和最大值是多少?