3 回答
TA贡献1815条经验 获得超10个赞
getRawOffset
不考虑夏令时。它反映了标准时间。从文档:
返回要添加到 UTC 以获取此时区中的标准时间的时间量(以毫秒为单位)。由于此值不受夏令时的影响,因此称为原始偏移量。
多伦多目前正在遵守夏令时(直到 11 月 4 日),因此其当前的 UTC 偏移量为 -4 小时,但这是 -5 小时“标准”和 +1 小时 DST。
现在有一个不准确的假设:时区永远不会改变其标准时间。java.util.TimeZone
是一种相对古老和原始的表示;最好java.time.ZoneId
与java.time
软件包的其余部分一起使用。
如果您必须使用java.util.TimeZone
,则调用getOffset(long)
以获取特定时刻的 UTC 偏移量。
TA贡献1803条经验 获得超6个赞
时间
该java.utilAPI是过时的,而且容易出错。建议完全停止使用它并切换到现代 Date-Time API *。
使用java.time现代日期时间 API 的解决方案:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.of("America/Toronto");
LocalDateTime ldtDstOn = LocalDateTime.of(LocalDate.of(2018, Month.OCTOBER, 22), LocalTime.MIN);
LocalDateTime ldtDstOff = LocalDateTime.of(LocalDate.of(2018, Month.NOVEMBER, 22), LocalTime.MIN);
// Using ZonedDateTime
ZoneOffset offsetDstOn = ZonedDateTime.of(ldtDstOn, zoneId).getOffset();
// Alternatively, using ZoneId#getRules
ZoneOffset offsetDstOff = zoneId.getRules().getOffset(ldtDstOff);
System.out.println(offsetDstOn);
System.out.println(offsetDstOff);
}
}
输出:
-04:00
-05:00
添加回答
举报