我知道 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;
}
我是一名优秀的程序员,十分优秀!