按国家/地区将UTC转换为具有历史准确性的本地



我有:

  • 一个国家(例如纳米比亚)
  • 存储在UTC中的DateTime(假设1955年10月23日下午12:01)

我想编写一个函数,将UTC日期时间转换为纳米比亚当地日期时间,并考虑夏令时,具有历史准确性。

我不能使用时区,因为有些国家实际上会移动时区(例如纳米比亚在冬季属于WAT(UTC+1),在夏季属于WAST(UTC+2)。

有什么CSharp功能可以实现这一点?如果只通过国家的两个字母的国家代码(例如"NA")就可以获得奖励积分。

理想的函数签名应该是:

public static DateTime UtcToLocal(this DateTime UtcDateTime, string CountryCode)

public static string UtcToLocal(this DateTime UtcDateTime, string CountryCode)

更新

正如下面的评论部分所指出的,一些国家被绑定到多个时区(例如美国)。因此,方法签名应该如下所示:

public static DateTime UtcToLocal(this DateTime UtcDateTime, string TZ_Environment_ZoneName)

如前所述,我使用TimeZoneInfo类来执行转换。

public static class DateExtenders
        {
            public static DateTime UtcToLocal(this DateTime UtcDateTime, string TimezoneName)
            {
                return
                    TimeZoneInfo.ConvertTimeFromUtc(UtcDateTime, TimeZoneInfo.GetSystemTimeZones().Where(tz => TimezoneName.Equals(tz.StandardName)).Single());
            }        
        }

TimeZoneName的值可以是以下任何值:

  • 日期线标准时间
  • UTC-11
  • 夏威夷标准时间
  • 阿拉斯加标准时间
  • 太平洋标准时间(墨西哥)
  • 太平洋标准时间
  • 美国山地标准时间
  • 山地标准时间(墨西哥)
  • 山地标准时间
  • 中美洲标准时间
  • 中央标准时间
  • 中部标准时间(墨西哥)
  • 加拿大中部标准时间
  • 南太平洋标准时间
  • 东部标准时间
  • 美国东部标准时间
  • 委内瑞拉标准时间
  • 巴拉圭标准时间
  • 大西洋标准时间
  • 巴西中部标准时间
  • 南非西部标准时间
  • 太平洋SA标准时间
  • 纽芬兰标准时间
  • E。南美洲标准时间
  • 阿根廷标准时间
  • 南非东部标准时间
  • 格陵兰标准时间
  • 蒙得维的亚标准时间
  • 巴伊亚标准时间
  • UTC-02
  • 大西洋中部标准时间
  • 亚速尔群岛标准时间
  • 佛得角标准时间
  • 摩洛哥标准时间
  • 协调世界时
  • GMT标准时间
  • 格林尼治标准时间
  • W。欧洲标准时间
  • 中欧标准时间
  • 罗曼史标准时间
  • 中欧标准时间
  • W。中非标准时间
  • 纳米比亚标准时间
  • 约旦标准时间
  • GTB标准时间
  • 中东标准时间
  • 埃及标准时间
  • 叙利亚标准时间
  • E。欧洲标准时间
  • 南非标准时间
  • FLE标准时间
  • 土耳其标准时间
  • 耶路撒冷标准时间
  • 俄罗斯TZ 1标准时间
  • 利比亚标准时间
  • 阿拉伯标准时间
  • 阿拉伯标准时间
  • 白俄罗斯标准时间
  • 俄罗斯TZ 2标准时间
  • E。非洲标准时间
  • 伊朗标准时间
  • 阿拉伯标准时间
  • 阿塞拜疆标准时间
  • 俄罗斯TZ 3标准时间
  • 毛里求斯标准时间
  • 格鲁吉亚标准时间
  • 高加索标准时间
  • 阿富汗标准时间
  • 西亚标准时间
  • 俄罗斯TZ 4标准时间
  • 巴基斯坦标准时间
  • 印度标准时间
  • 斯里兰卡标准时间
  • 尼泊尔标准时间
  • 中亚标准时间
  • 孟加拉国标准时间
  • 俄罗斯TZ 5标准时间
  • 缅甸标准时间
  • 东南亚标准时间
  • 俄罗斯TZ 6标准时间
  • 中国标准时间
  • 俄罗斯TZ 7标准时间
  • 马来半岛标准时间
  • W。澳大利亚标准时间
  • 台北标准时间
  • 乌兰巴托标准时间
  • 东京标准时间
  • 韩国标准时间
  • 俄罗斯TZ 8标准时间
  • Cen。澳大利亚标准时间
  • 澳大利亚中部标准时间
  • E。澳大利亚标准时间
  • 澳大利亚东部标准时间
  • 西太平洋标准时间
  • 塔斯马尼亚标准时间
  • 马加丹标准时间
  • 俄罗斯TZ 9标准时间
  • 俄罗斯TZ 10标准时间
  • 中太平洋标准时间
  • 俄罗斯TZ 11标准时间
  • 新西兰标准时间
  • UTC+12
  • 斐济标准时间
  • 堪察加标准时间
  • 汤加标准时间
  • 萨摩亚标准时间
  • Line Islands标准时间

不幸的是,我不确定上面列出的值使用了哪种正式的命名标准/命名约定

更新

自从我发布了这个答案后,我就采用了Jon Skeet的Nodatime库,这是一个处理日期时间概念的优秀库。我强烈建议它不要纠结于BCL的日期、时间和时间跨度课程!

相关内容

  • 没有找到相关文章

最新更新