我需要根据用户选择的时区同步设备上的设备内部时钟。 我使用以下代码获取该区域相对于系统时钟的当前时间:
var currentInstant = SystemClock.Instance.GetCurrentInstant().InZone(userTimezone);
但我还需要能够切换一个启用/禁用区域DST的标志,这意味着如果区域当前有DST激活,我需要能够减去它添加的偏移量,并且只将内部时钟设置为区域时间与标准偏移量。
我找到了标准偏移量(不是100%,这是正确的):
currentInstant.GetZoneInterval().StandardOffset;
但是我不确定如何使用它获得区域时间?
答案 0 :(得分:2)
听起来你几乎就在那里。你可能想要OffsetDateTime
或LocalDateTime
,你会得到这样的结果:
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的区域”不是常规时区。但听起来这就是你所需要的。
正如马特所说,这是一个根本不好的主意 - 我知道你已经试图说服你的客户,但是当你的客户明白它是坏的时候,你可能需要提前思考并做出你将要做的事情。想法也是......