首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# TimeZoneInfo将GMT时区名称转换为系统时区

C# TimeZoneInfo将GMT时区名称转换为系统时区
EN

Stack Overflow用户
提问于 2017-11-29 09:20:22
回答 1查看 2.6K关注 0票数 1

在windows中,我们得到如下所示的时区列表:

代码语言:javascript
复制
ID    Time zone name               Display string
--    --------------               --------------
0     Dateline Standard Time       (UTC-12:00) International Date Line West
110   UTC-11                       (UTC-11:00) Coordinated Universal Time -11
200   Hawaiian Standard Time       (UTC-10:00) Hawaii
300   Alaskan Standard Time        (UTC-09:00) Alaska

更多的这里

我使用此列表从一个时区转换为另一个时区,使用接受上面列表中显示的时区名称的TimeZoneInfo类。

例如。

代码语言:javascript
复制
// Local time zone to UTC
var utcOffset = new DateTimeOffset(DateTime.UtcNow, TimeSpan.Zero);
var localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timezoneName); // here tz name can be any name from above table
var localOffset = new DateTimeOffset(date.Value, localTimeZone.GetUtcOffset(utcOffset));
DateTime utcDate = localOffset.UtcDateTime;

现在,我遇到了SalesForce时区表示形式,如:

代码语言:javascript
复制
Time Zone Code  Time Zone Name
--------------  --------------
GMT+14:00       Line Is. Time (Pacific/Kiritimati)
GMT+13:00       Phoenix Is.Time (Pacific/Enderbury)
GMT+13:00       Tonga Time (Pacific/Tongatapu)
GMT+12:45       Chatham Standard Time (Pacific/Chatham)

更多的这里

我找不到内置的功能来使用上表中给出的用于转换的time zone codetime zone name

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-29 09:51:08

如果您乐于坚持使用TimeZoneInfoDateTime/DateTimeOffset,可以使用Matt的TimeZoneConverter库将IANA ID (括号中的部分,例如Pacific/基里形蒂)转换为Windows时区ID。

来自项目页文档的示例

代码语言:javascript
复制
string tz = TZConvert.IanaToWindows("America/New_York");
// Result:  "Eastern Standard Time"

或者:

代码语言:javascript
复制
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("America/New_York");

然而,需要注意的是:

  • 从IANA ID到Windows ID的映射并不总是完整的。有些没有被映射,尽管情况比过去好。
  • Windows时区数据有时可能与IANA数据不同。(再一次,情况正在好转。)
  • 时区数据随时间变化。如果要存储未来的日期/时间值,则可能需要存储时区和本地时间,而不是UTC即时时间。(这个瞬间可能不会映射到将来相同的本地时间。)
  • 一些本地时间可能是不明确的--例如,如果时钟在某一特定时区的某一特定日期从凌晨2点回到凌晨1点,那么当天的1:15将在该时区发生两次。想一想你想如何处理它,并测试它。

无论如何,我个人建议使用我的野田时间库来处理日期/时间,但我承认,如果已经有很多处理DateTime的代码,这可能是不可行的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47549107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档