|
|
1
91
更新的答案 我的原始回复如下,并且仍然有效。然而,现在有一种更简单的方法,使用 the TimeZoneNames library .安装后 from Nuget ,您可以执行以下操作:
生成的对象将具有类似于以下内容的属性:
您也可以使用这个库来获取时区的完全本地化名称。该库使用CLDR数据的嵌入式自包含副本。 原始答案 正如其他人提到的那样,时区缩写是模棱两可的。但如果你真的想要一个显示,你需要一个IANA/Olson时区数据库。 您可以从Windows时区转到IANA/Olson时区,也可以转到其他方向。但请注意,对于任何给定的Windows区域,都可能有多个IANA/Olson区域。这些映射在CLDR中进行维护 here .
NodaTime
同时具有数据库和映射。你可以从.Net上访问
|
|
|
2
15
这是一个棘手的要求,你能做的最好的事情就是获得你选择的列表,并创建一个扩展/帮助方法来获得给定TimeZoneInfo的缩写。 一旦开始的地方在 http://www.timeanddate.com/library/abbreviations/timezones/ 它有一个列表版本,涵盖了我所知道的区域。 问题是在给定时区存在多个缩写的情况下选择合适的缩写。例如 离合器 可以表示为 离合器 或 西欧时间 或 WEZ(《西欧日报》) 或 西撒哈拉标准时间 . 您可能希望与您的利益相关者就您将在给定的选择中遵循的命名约定达成一致。 |
|
3
14
您的问题并没有说明您的应用程序必须在哪些时区内运行,但在我的特定情况下,我只需要关注美国时区和UTC。 美国时区的缩写始终是时区名称中每个单词的第一个字符。例如,“山地标准时间”的缩写是“MST”,而“东部夏令时”的缩写则是“EDT”。 如果你有类似的要求,你可以很容易地直接从当地时区的名称中推导出当地时区的时区缩写,如下所示(注意:这里我是根据当前的日期和时间来确定正确的名称):
的代码
|
|
|
4
5
下面是另一个使用NodaTime的片段:
在我的系统中,这会产生:“2013年4月11日下午5:03:23 CDT(UTC-05:00美国/芝加哥)” (感谢Matt Johnson的回答,因为这个缩写存在于TimeZoneInterval中) 如果NodaTime.ZonedDateTime有一个GetZoneInterval方法会更容易,但也许我遗漏了一些东西。 |
|
|
5
4
这对任何在iOS或Android上使用Xamarin的人都很有帮助,因为根据文档“显示名称基于Windows操作系统安装的区域性进行本地化”。当在中央时区使用此功能时,对于DateTime“2016-09-01 12:00:00 GMT”,此函数会返回“CDT”,这正是我遇到此问题时所需要的。
|
|
|
6
4
我将所有日期存储在UTC中,并且经常必须以本地时间显示,所以我创建了一个扩展方法
示例用法:
或者,如果您只想从DateTime对象中获取格式化的日期字符串:
并按如下方式使用:
输出:
|
|
|
7
1
我也有类似的问题,但不想使用第三方图书馆(正如大多数答案所暗示的那样)。如果您只想支持.Net的时区名称,并决定使用查找表,请查看 my answer over here ,它依靠PHP来帮助生成缩写列表。您可以调整那里的代码片段和表格以满足您的需求。 |
|
|
8
0
|
|
|
9
0
您可以使用 this spreadsheet 所有时区缩写组合如下:
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |