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

时间:2014-02-22 06:03:16

标签: c# timezone

如果我们提供"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 个答案:

答案 0 :(得分:1)

时区ID America/Phoenix来自IANA time zone database。 .Net的TimeZoneInfo类不使用该数据。有关详细信息,请参阅the timezone tag 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();