Mar*_*man 5 .net c# windows asp.net timezone
他们甚至存在吗?我真的厌倦了向我的欧洲用户展示"浪漫标准时间",并试图解释为什么他们的"中欧时间"不能显示为"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;
}
Run Code Online (Sandbox Code Playgroud)
好吧,即使是"普遍接受的缩写"也不是一个好主意 - 因为它们太模糊了.如果你说"EDT"你的意思是美国的东部夏令时,还是澳大利亚的东部夏令时?
更普遍接受的技术解决方案是使用诸如"Europe/London"之类的Olson(zoneinfo)名称作为标识符.如何向用户呈现这些是另一回事,但通常我看到用户界面具有特定时区的地名以及与UTC的标准(或当前;它变化)偏移.例如,请参阅Google日历的时区设置.
这实际上是一个国际化(或本地化,我永远不会记住)标识符到用户友好名称的问题,但是你这样做.
您始终可以构建人行横道方法并自行转换它们。您只需要获取每个时间的列表,然后自己过马路即可。我不知道 Windows 中是否有任何东西可以为您提供此功能,但您并没有讲很多代码来自己完成它......
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |