当前位置:  开发笔记 > 编程语言 > 正文

如何使用缩写的时区显示DateTime?

如何解决《如何使用缩写的时区显示DateTime?》经验,为你挑选了2个好方法。

我知道System.TimeZone类以及DateTime.ToString()方法的许多用法.我无法找到的是一种将DateTime转换为字符串的方法,除了时间和日期信息之外,还包含三个字母的Time Zone缩写(事实上,与StackOverflow的相对工具提示大致相同)时间显示工作).

为了让每个人都能轻松地关注和消费,让我们继续使用StackOverflow示例.如果查看相对时间显示的工具提示,它将显示完整日期,时间包括12小时格式的秒数,AM/PM指定,然后是三字母时区缩写(在他们的情况下为Coordinated)世界时间).我意识到我可以通过使用内置方法轻松获得GMT或UTC,但我真正想要的是它本地的时间 - 在这种情况下,在Web服务器上.

如果我们的Web服务器正在运行Windows Server 2k3并且它的时区设置为CST(或者,直到夏令时切换回来,CDT就是它?),我希望我们的ASP.NET Web应用程序显示相对于该时区的DateTimes以及格式化以在结尾显示"CST".我意识到我可以很容易地对其进行硬编码,但为了健壮,我真的更喜欢基于运行代码的OS环境设置的服务器的解决方案.

现在,除了时区缩写,我使用以下代码:

myDateTime.ToString("MM/dd/yyyy hh:mm:ss tt")

哪个显示:

10/07/2008 03:40:31 PM

所有我想要的(并没有多少,许诺!)是这样说的:

10/07/2008 03:40:31 PM CDT

我可以使用System.TimeZone.CurrentTimeZone并使用它来正确显示"Central Daylight Time"但是......为了简洁起见,这有点太长了.我是不是写了一个字符串操作例程来去掉白色空格和任何非大写字母?虽然这可能有用,但这对我来说似乎非常糟糕......

谷歌搜索和环顾四周并没有产生任何适用于我的具体问题.



1> craigmoliver..:

这是我刚刚解决这个问题的快速黑客方法.

public static String TimeZoneName(DateTime dt)
{
    String sName = TimeZone.CurrentTimeZone.IsDaylightSavingTime(dt) 
        ? TimeZone.CurrentTimeZone.DaylightName 
        : TimeZone.CurrentTimeZone.StandardName;

    String sNewName = "";
    String[] sSplit = sName.Split(new char[]{' '});
    foreach (String s in sSplit)
        if (s.Length >= 1)
            sNewName += s.Substring(0, 1);

    return sNewName;
}


这种方法有一些缺陷.例如,在亚利桑那州,他们使用Mountain Standard Time并且不遵守夏令时,.NET具有DaylightName和StandardName"US Mountain Standard Time",它将使用您的方法显示"UMST".我期望看到"MST"(在夏季和冬季).不幸的是,.NET框架似乎在这里不足,所以我采用了静态查找表.

2> Dave Moore..:

有一个免费提供的图书馆,TZ4NET,有这些缩写.在.NET 3.5之前,这是在时区之间进行转换的唯一选择之一.

如果你不想要一个单独的库,你当然可以使用TimeZoneInfo类生成合理缩写的映射,然后只提供给你的用户.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有