Sea*_*ley 38 .net formatting timezone datetime tostring
我知道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")
Run Code Online (Sandbox Code Playgroud)
哪个显示:
10/07/2008 03:40:31 PM
所有我想要的(并没有多少,许诺!)是这样说的:
10/07/2008 03:40:31 PM CDT
我可以使用System.TimeZone.CurrentTimeZone并使用它来正确显示"Central Daylight Time"但是......为了简洁起见,这有点太长了.我是不是写了一个字符串操作例程来去掉白色空格和任何非大写字母?虽然这可能有用,但这对我来说似乎非常糟糕......
谷歌搜索和环顾四周并没有产生任何适用于我的具体问题.
cra*_*ver 20
这是我刚刚解决这个问题的快速黑客方法.
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;
}
Run Code Online (Sandbox Code Playgroud)
使用nodatime。
以下函数采用DateTime
UTC 时间并使用缩写的本地系统时区对其进行格式化。在格式字符串中使用x
缩写时区。在此处查找自定义格式。
public static string ConvertToFormattedLocalTimeWithTimezone(DateTime dateTimeUtc)
{
var tz = DateTimeZoneProviders.Tzdb.GetSystemDefault(); // Get the system's time zone
var zdt = new ZonedDateTime(Instant.FromDateTimeUtc(dateTimeUtc), tz);
return zdt.ToString("MM'/'dd'/'yyyy' 'hh':'mm':'ss' 'tt' 'x", CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)
这取决于您需要的稳健性级别。
不管怎样,你可能都需要某种黑客手段。一种简单的方法是用空格分割字符串,然后连接每个单词的第一个字母。IE
string[] words = tzname.Split(" ".ToCharArray());
string tzabbr = "";
foreach (string word in words)
tzabbr += word[0];
Run Code Online (Sandbox Code Playgroud)
这并不适用于地球上的每个时区,但适用于大多数时区。如果您需要它更强大,那么您可能需要创建一个将时区名称映射到其缩写的地图。
归档时间: |
|
查看次数: |
27067 次 |
最近记录: |