确定如何在ZoneDateTime上使用nodaTime和withZone计算不同时区的时间

时间:2013-05-15 21:39:55

标签: timezone-offset nodatime

在时区之间转换时间。我发现以下代码有效。但是,我不确定如何以编程方式将{0}的构造函数的偏移量作为我的偏移量。我可以选择区域芝加哥的一个偏移,这只是两个,因为它要么我们没有夏令时,但我怎么知道我使用哪一个,以及时区只有两个,什么是最好的填充该偏移的方法?

谢谢,

吉姆

ZonedDateTime

1 个答案:

答案 0 :(得分:3)

如果您对当前时间感兴趣,可以使更多更简单 - 而且确实更可测试。使您的代码采用IClock作为“提供当前即时的服务”。对于具体实现,请在生产中使用SystemClock.Instance,但在FakeClock进行测试。

IClock只有一名成员:Now。这会及时返回当前Instant,这与时区甚至日历系统无关。

使用Instant和时区,您可以轻松访问ZonedDateTime

Instant now = clock.Now;
var zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime = now.InZone(zone);

它将确定本地日期/时间和偏移量。你不需要做任何聪明的事情:)