在Windows Phone中将本地TimeZone转换为PST

时间:2014-09-02 06:12:09

标签: windows-phone-8

我需要在Windows Phone中将我的本地TimeZone转换为PST,我们是否有API来执行此操作?如果没有,那么这里的最佳做法是什么?请注意,手机可以根据其在世界上的位置处于任何时区。

1 个答案:

答案 0 :(得分:1)

假设您的意思是太平洋时间,您可以使用我的Noda Time项目,假设DateTime在本地转化方面正常运作。

// Initial conversion using BCL classes
DateTime local = ...;
DateTime utc = local.ToUniversalTime();

// The rest in Noda Time
Instant instant = Instant.FromDateTimeUtc(utc);
DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime pacificTime = instant.InZone(zone);

ZonedDateTime您可以获得LocalDateTime,或者只是将其保留为ZonedDateTime。 (您也可以使用DateTime转换回ToDateTimeUnspecified()。)

可以要求Noda Time进行转换的两个部分,但由于TimeZoneInfo的PCL版本不提供Id属性,我们必须执行猜测时区的一些启发式方法 - 使用DateTime进行第一次转换可能会更加可靠(尽管它并没有给你如何控制如何处理DST转换)。

如果您只需要当前时间,则根本不需要BCL类型。你可以一直去Noda Time:

// You'd normally inject this, so that you can test different scenarios. Noda Time
// provides a Testing package which includes a fake implementation of IClock.
// Use SystemClock.Instance for production use.
IClock clock = ...;
DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime pacificTime = clock.Now.InZone(zone);

在Noda Time 2.0中,我们引入了ZonedClock,这会让事情变得更容易一些 - 您将能够为太平洋时区创建ZonedClock,然后请求它当前ZonedDateTime或当前LocalDateTime