使用和不使用NodaTime的DST偏移的特定时区中的当前日期时间

时间:2017-11-15 15:29:17

标签: c# .net nodatime

我需要根据用户选择的时区同步设备上的设备内部时钟。 我使用以下代码获取该区域相对于系统时钟的当前时间:

var currentInstant = SystemClock.Instance.GetCurrentInstant().InZone(userTimezone);

但我还需要能够切换一个启用/禁用区域DST的标志,这意味着如果区域当前有DST激活,我需要能够减去它添加的偏移量,并且只将内部时钟设置为区域时间与标准偏移量。

我找到了标准偏移量(不是100%,这是正确的):

currentInstant.GetZoneInterval().StandardOffset;

但是我不确定如何使用它获得区域时间?

1 个答案:

答案 0 :(得分:2)

听起来你几乎就在那里。你可能想要OffsetDateTimeLocalDateTime,你会得到这样的结果:

var now = SystemClock.Instance.GetCurrentInstant();
var zoneInterval = zone.GetZoneInterval(now);
var offset = zoneInterval.StandardOffset; // Ignore any savings
OffsetDateTime offsetNow = now.WithOffset(offset);

如果您需要,可以LocalDateTime offsetNow.LocalDateTime

此时,您没有ZonedDateTime,因为您实际上没有时区 - 您的“没有DST的区域”不是常规时区。但听起来这就是你所需要的。

正如马特所说,这是一个根本不好的主意 - 我知道你已经试图说服你的客户,但是当你的客户明白它是坏的时候,你可能需要提前思考并做出你将要做的事情。想法也是......