2

在时区之间转换时间时。我发现以下代码有效。但是,我不确定如何以编程方式将什么作为ZonedDateTime. 我可以选择 zoneChicago 上的偏移量之一,它只有两个,因为它要么使用我们没有夏令时,但我怎么知道我使用哪一个,对于只有两个以上的时区,什么是最好的填充该偏移量的方法?

谢谢,

吉姆

var zoneLA      = c.GetZoneOrNull("America/Los_Angeles");
var zoneChicago = c.GetZoneOrNull("America/Chicago");

var zdtChicago = new ZonedDateTime( LocalDateTime.FromDateTime(DateTime.Now)
                                  , zoneChicago
                                  , zoneChicago.MaxOffset);

var zdtLA = zdtChicago.WithZone(zoneLA);
4

1 回答 1

3

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

IClock有一个成员:Now. 这将返回当前Instant时间,该时间与时区甚至日历系统无关。

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

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

它将计算出本地日期/时间和偏移量是多少。你不需要做任何聪明的事情:)

于 2013-05-16T10:30:11.147 回答