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
添加回答
舉報