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

标签 .net datetime formatting timezone tostring

我知道 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;
}

关于.net - 如何使用缩写的时区显示 DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/180370/

相关文章:

c# - 是否可以使用并行端口对 LCD 20X2 显示器进行编程?

c# - 带附加参数的 WCF REST 文件上传

c# - HttpWebRequest 内容长度错误

c# - 始终运行网络服务

Java 日期时间格式化程序

java - 如何在几分钟内检索两个 Date 实例之间的差异?

php - DateTime::diff 和夏令时结束

text - 复制和粘贴时撇号会发生变化

java - Java中能否将字符串转换为包含转义序列的字符串?

javascript - 从JS的特定数字中删除逗号分隔