【发布时间】:2019-07-03 18:50:30
【问题描述】:
在为 PST 配置的计算机上给定一个 Local DateTime 值(当 DST 开始时,它将在 3 月 10 日隐式更改为 PDT),如何获取包含适当 时区的字符串 - 例如。 PST/PDT,不偏移! - 在输出中?
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ???")
预期的输出字符串,例如:
"2019-02-09 13:04:22 PST" // right after lunch today
"2019-04-09 13:04:22 PDT" // right after lunch in two months
MSDN DateTime Custom Format Strings 页面显示了将“PST”显式硬编码到输出中的示例,这将在半年和/或本地 TZ 更改时出错。计算机和人会移动,因此硬编码 TZ 值是“不合适的”。
最好这可以通过只是一个格式字符串来完成,允许在渲染/到字符串阶段之前提供 DateTime 值 - 尽管似乎没有“ZZZ”格式。我已经指定了“本地”日期时间类型,希望能减少一些额外的怪癖..
【问题讨论】:
-
你试过
TimeZoneInfo吗?从那里你可以创建一个扩展方法,你可以在任何 DateTime 属性上使用它。 docs.microsoft.com/en-us/dotnet/api/… -
@bene_rawr 我主要处理一些旧的、讨厌的 ASP
<%= Eval("Property", "FormatString") %>代码,我希望,也许是徒劳的,我错过了一些字符串格式的魔法:} -
所有
FormatStrings 都列在您刚刚发布的链接中。所以没有什么比这更神奇的了。 -
是什么让您认为世界上每个时区和每种语言都存在时区缩写?甚至,那么是什么让您认为时区缩写足以识别时区?提示 - 这两个问题都是无定形的。考虑“CST”或“IST”——每个人在世界上都有三到四个他们可能属于的地方。还有很多很多其他的案例......
-
考虑使用 DateTimeOffset 并简单地显示偏移量而不是一些非标准时区缩写
标签: c# .net datetime localization timezone