我一直在使用以下代码而没有缺陷:
internal static string WindowsToIana(string windowsZoneId)
{
if (windowsZoneId.Equals("UTC", StringComparison.Ordinal))
return "Etc/UTC";
var tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.Default;
var tzi = TimeZoneInfo.FindSystemTimeZoneById(windowsZoneId);
if (tzi == null) return null;
var tzid = tzdbSource.MapTimeZoneId(tzi);
if (tzid == null) return null;
return tzdbSource.CanonicalIdMap[tzid];
}
Run Code Online (Sandbox Code Playgroud)
将NodaTime升级到2.0版时,我现在得到一个编译时错误,说MapTimeZoneId不再存在.如何让这个功能再次运行?
Jon*_*eet 10
目前,您需要Noda Time内部存在的相同代码,但它并不是很多:
internal static string WindowsToIana(string windowsZoneId)
{
// Avoid UTC being mapped to Etc/GMT, which is the mapping in CLDR
if (windowsZoneId == "UTC")
{
return "Etc/UTC";
}
var source = TzdbDateTimeZoneSource.Default;
string result;
// If there's no such mapping, result will be null.
source.WindowsMapping.PrimaryMapping.TryGetValue(windowsZoneId, out result);
// Canonicalize
if (result != null)
{
result = source.CanonicalIdMap[result];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
TimeZoneInfo.Local.Id则可能已经是IANA ID,因此null在大多数情况下此代码将返回.我已经提交了一个问题来处理迁移指南中没有提到的事实.
| 归档时间: |
|
| 查看次数: |
911 次 |
| 最近记录: |