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

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

为了让每个人都能轻松学习和使用示例,让我们继续 StackOverflow 示例。如果您查看显示相对时间的工具提示,它会显示完整日期、时间(包括 12 小时格式的秒数)、AM/PM 名称,然后是三个字母的时区缩写(在他们的情况下,协调世界时)。我意识到我可以通过使用内置方法轻松获取 GMT 或 UTC,但我真正想要的是本地时间——在本例中,是在 Web 服务器上。

如果我们的 Web 服务器运行的是 Windows Server 2k3 并且它的时区设置为 CST(或者,直到 daylight saving 切换回来,是 CDT 吗?),我希望我们的 ASP.NET Web 应用程序显示相对日期时间到那个时区,并格式化为最后显示“CST”。我意识到我可以轻松地对其进行硬编码,但出于稳健性的考虑,我真的更喜欢基于运行代码的操作系统环境设置的服务器的解决方案。

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

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

其中显示:

2008 年 10 月 7 日下午 3:40:31

我想要的只是( promise 不多!)就是让它说:

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

我可以使用 System.TimeZone.CurrentTimeZone 并使用它来正确显示“Central Daylight Time”但是......为了简洁起见,这有点太长了。然后我是否坚持编写字符串操作例程来去除空格和任何非大写字母?虽然这可能行得通,但对我来说这似乎令人难以置信......

Googling并在这里环顾四周并没有产生任何适用于我的具体问题的东西。

最佳答案

这是我刚刚为解决此问题而制定的快速破解方法。

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

https://stackoverflow.com/questions/180370/

相关文章:

c# - 在 C# 中使用自定义千位分隔符

c# - 如何停止 ReSharper 删除对象初始化程序中的空格

php - $SimpleXML->asXML() 的格式输出;

python - 如何右对齐数字数据?

c# - 在 C# (asp.net MVC3) 中用逗号和小数格式化数字

c++ - 使用printf打印 float 时有额外的前导零?

c# - 十六进制的 String.Format

ios - 如何将 Double 格式化为货币 - Swift 3

c# - 格式化 TimeSpan 大于 24 小时

ruby - CSV.read 第 x 行的非法引用