如何从时区名称获取日期和时间

4
如果我们提供时区地区的名称,比如 "America/Phoenix",有没有办法在 C# 中获取当前日期和时间?
我尝试了以下代码:
TimeZoneInfo ZoneName = System.TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time");
DateTime dataTimeByZoneId = System.TimeZoneInfo.ConvertTime(DateTime.Now,System.TimeZoneInfo.Local, ZoneName);

但它需要/期望输入为"US Standard Time Zone"。 我希望输入为"America/Phoenix"。请问在C#中有什么选项/方法可以实现这一点吗?


1
处理与时间和日期相关的任务,我建议使用Noda Time。有关更多信息,请参见http://nodatime.org/。 - Ikaso
看看这个链接,或许能帮到你 :) - Rohit416
1个回答

1

时区标识符(如America/Phoenix)来自IANA时区数据库。 .Net的TimeZoneInfo类不使用该数据。有关详细信息,请参见时区标记wiki

要在.NET中使用IANA时区标识符,您应查看Noda Time。以下是使用Noda Time获取America/Phoenix当前本地时间的方法:

Instant now = SystemClock.Instance.Now;
DateTimeZone tz = DateTimeZoneProviders.Tzdb["America/Phoenix"];
ZonedDateTime zdt = now.InZone(tz);

// Then depending on what your needs are, pick one of the following:
LocalDateTime ldt = zdt.LocalDateTime;
DateTime dt = zdt.ToDateTimeUnspecified();
DateTimeOffset dto = zdt.ToDateTimeOffset();

感谢回复。执行代码后我会通知你。 - Neharika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接