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