在时区之间转换时间。我发现以下代码有效。但是,我不确定如何以编程方式将{0}的构造函数的偏移量作为我的偏移量。我可以选择区域芝加哥的一个偏移,这只是两个,因为它要么我们没有夏令时,但我怎么知道我使用哪一个,以及时区只有两个,什么是最好的填充该偏移的方法?
谢谢,
吉姆
ZonedDateTime
答案 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);
它将确定本地日期/时间和偏移量。你不需要做任何聪明的事情:)