我有:
我想编写一个函数,将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)
答案 0 :(得分:0)
如上所述,我使用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的值可以是以下任何值:
不幸的是,我不确定哪种正式的命名标准/命名约定用于上面列出的值
自从我发布这个答案后,我就采用了Jon Skeet的Nodatime库,这是一个用于处理日期时间概念的优秀库。我强烈推荐它在BCL日期,时间和时间跨度课程上挣扎!