Java 日期获取实际偏移量

我想获得一个时区的实际偏移量。


我的问题 :


 TimeZone tz = TimeZone.getTimeZone("America/Toronto");

int test = tz.getRawOffset();


test = -18000000


-18000000/1000/3600 = -5 

或者如果我去https://www.google.fr/search?q=horaire+toronto&oq=horaire+toro&aqs=chrome.1.69i57j0l5.3311j0j7&sourceid=chrome&ie=UTF-8


我看到多伦多在 UTC-4。


它写在文档上,该方法返回 brut offset。


但是我怎样才能得到真正的偏移量?


30秒到达战场
浏览 361回答 3
3回答

动漫人物

getRawOffset不考虑夏令时。它反映了标准时间。从文档:返回要添加到 UTC 以获取此时区中的标准时间的时间量(以毫秒为单位)。由于此值不受夏令时的影响,因此称为原始偏移量。多伦多目前正在遵守夏令时(直到 11 月 4 日),因此其当前的 UTC 偏移量为 -4 小时,但这是 -5 小时“标准”和 +1 小时 DST。现在有一个不准确的假设:时区永远不会改变其标准时间。java.util.TimeZone是一种相对古老和原始的表示;最好java.time.ZoneId与java.time软件包的其余部分一起使用。如果您必须使用java.util.TimeZone,则调用getOffset(long)以获取特定时刻的 UTC 偏移量。

慕码人8056858

时间该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

慕哥9229398

不要使用 getRawOffset用 : tz.getOffset(new Date().getTime()) / 1000 / 3600
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java