他们甚至存在吗?我真的厌倦了向我的欧洲用户展示“浪漫标准时间”,并试图解释为什么他们的“中欧时间”不能显示为“CET”。如果我解析“浪漫标准时间”并向他们展示对他们毫无意义的“RST”,或者可能混淆为“俄罗斯标准时间”或其他废话。
是否有办法从Windows获取普遍接受的缩写?我需要一些适用于北美,南美,欧洲,非洲和亚洲的东西。
更新:我知道,这是一个完全黑客攻击,但它可能会让我得到90%我关心的案例。如果你有建议,我仍然全力以赴;)
/// <summary>
/// Gets the current time zone abbreviation, corrected for Daylight Saving Time (if applicable)
/// </summary>
/// <param name="timeZoneId">The time zone id.</param>
/// <returns></returns>
public static string GetTZAbbrev(string timeZoneId)
{
var timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();
var abbrev = string.Empty;
foreach (var timeZoneInfo in timeZoneInfos)
{
if (timeZoneInfo.Id != timeZoneId) continue;
string[] words;
if (timeZoneInfo.IsDaylightSavingTime(DateTime.UtcNow))
{
words = timeZoneInfo.DaylightName.Split(' ');
}
else
{
words = timeZoneInfo.StandardName.Split(' ');
}
foreach (var word in words)
{
abbrev += word[0];
}
}
return abbrev;
}
答案 0 :(得分:6)
嗯,即使是“普遍接受的缩写”也不是一个好主意 - 因为它们太模糊了。如果你说“EDT”你的意思是美国的东部夏令时,还是澳大利亚的东部夏令时?
更普遍接受的技术解决方案是使用Olson(zoneinfo)名称(例如“Europe / London”)作为标识符。如何向用户呈现这些是另一回事,但通常我看到用户界面具有特定时区的地名以及与UTC的标准(或当前;它变化)偏移。例如,请参阅Google日历的时区设置。
这实际上是一个国际化(或本地化,我永远不会记住)标识符到用户友好名称的问题,但是你这样做。
答案 1 :(得分:1)
您可以随时构建一个人行横道方法并自行转换。您只需要获取每次的列表,然后自己进行人行道。我不知道Windows中有什么东西可以帮到你,但你自己也不是在说很多代码......