【发布时间】:2014-08-01 08:07:31
【问题描述】:
来自 Jon Skeet 的 NodaTime documentation:
我们添加的时间实际上是“经验”时间 - 好像我们会 只是等了二十分钟。然而,当天凌晨 1 点,时钟 在欧洲/伦敦时区前进一个小时 - 所以我们结束了 当地时间是凌晨 2:05,而不是您预期的凌晨 1:05
但是,当我尝试此代码时,有效地将大部分代码从 NodaCode 文档复制并粘贴到应用程序中,after 变量具有 01:05:00,而不是 02 :05:00。为什么不考虑时区?
DateTimeZone london = DateTimeZoneProviders.Tzdb["Europe/London"];
LocalDateTime local = new LocalDateTime(2012, 3, 27, 0, 45, 00);
ZonedDateTime before = london.AtStrictly(local);
ZonedDateTime after = before + Duration.FromMinutes(20);
Debug.WriteLine("local = {0}",local);
Debug.WriteLine("before adding 20 minutes = {0}", before);
Debug.WriteLine("after adding 20 minutes= {0}", after);
输出:
local = 03/27/2012 00:45:00
before adding 20 minutes = 2012-03-27T00:45:00 Europe/London (+01)
after adding 20 minutes= 2012-03-27T01:05:00 Europe/London (+01)
更新:
根据下面 Dean Ward 的回答,我尝试使用 26th 代替,但它仍然没有实现夏令时更改。 :(
DateTimeZone london = DateTimeZoneProviders.Tzdb["Europe/London"];
LocalDateTime local = new LocalDateTime(2012, 3, 26, 0, 45, 00);
ZonedDateTime before = london.AtStrictly(local);
ZonedDateTime after = before + Duration.FromMinutes(20);
输出:
local = 03/26/2012 00:45:00
before adding 20 minutes = 2012-03-26T00:45:00 Europe/London (+01)
after adding 20 minutes= 2012-03-26T01:05:00 Europe/London (+01)
【问题讨论】: