ASP.NET中的Windows时区缩写

他们甚至存在吗? 我非常不习惯向欧洲用户展示“浪漫标准时间”,并试图解释为什么他们的“中欧时间”不能显示为“CET”。 如果我parsing“浪漫标准时间”,并向他们提出对他们毫无意义的“RST”,或者可能被混淆为“俄罗斯标准时间”或其他废话。

有没有办法从Windows中获得普遍接受的缩写? 我需要在北美,南美,欧洲,非洲和亚洲有效的东西。

更新:这是一个彻头彻尾的黑客,但我知道,但它可能会让我90%的案件我关心。 如果你有什么build议,我仍然是耳朵;)

/// <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; } 

Solutions Collecting From Web of "ASP.NET中的Windows时区缩写"

那么,即使是“普遍接受的缩略语”也不是一个好主意 – 因为它们很模糊。 如果你说“美国东部时间”是指美国东部夏令时,还是澳大利亚东部夏令时?

更普遍接受的技术解决方案是使用Olson(zoneinfo)名称,例如“Europe / London”作为标识符。 如何向用户呈现这些内容是另一回事,但通常我会看到具有特定时区地名的用户界面,以及与UTC的标准偏差(或当前偏差)。 例如,查看Google日历的时区设置。

这实际上是一个国际化(或本地化,我永远不会记得)标识符到用户友好名称的问题,但是你这样做。

你总是可以建立一个人行横道方法并自己转换它们。 你只需要得到每一个列表,然后自己人行横道。 我不知道有什么东西在窗口中有这个给你,但是你不会说很多代码来自己做