问题描述
我需要确定我当前的系统时区是UTC时区之前还是之后,我尝试了不同的方法,但是问题是我想从系统中获取当前时区并将其与UTC进行比较。
有很多与此相关的问题,但是对于概念的前后,我没有发现任何问题。
我没有问如何找到zoneOffset。我只想检查应用程序是否在UTC时区之前还是之后。
解决方法
您可以比较编号。区域偏移的秒数,例如
import java.time.Instant;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
long offsetSecondsMyTZ = ZoneOffset.systemDefault().getRules().getOffset(Instant.now()).getTotalSeconds();
if (offsetSecondsMyTZ > 0) {
System.out.println("My timezone is ahead of UTC");
} else if (offsetSecondsMyTZ < 0) {
System.out.println("My timezone is behind UTC");
} else {
System.out.println("My timezone is UTC");
}
// Assuming my time-zone is UTC
offsetSecondsMyTZ = ZoneOffset.UTC.getTotalSeconds();
if (offsetSecondsMyTZ > 0) {
System.out.println("My timezone is ahead of UTC");
} else if (offsetSecondsMyTZ < 0) {
System.out.println("My timezone is behind UTC");
} else {
System.out.println("My timezone is UTC");
}
// Assuming my time-zone is UTC - 2 hours
offsetSecondsMyTZ = ZoneOffset.ofHours(-2).getTotalSeconds();
if (offsetSecondsMyTZ > 0) {
System.out.println("My timezone is ahead of UTC");
} else if (offsetSecondsMyTZ < 0) {
System.out.println("My timezone is behind UTC");
} else {
System.out.println("My timezone is UTC");
}
}
}
输出:
My timezone is ahead of UTC
My timezone is UTC
My timezone is behind UTC
注意:该解决方案基于this answer。
,Arvind Kumar Avinash已经有了很好的答案。我的代码仅在细节上有所不同。
ZoneOffset myZoneOffset
= OffsetDateTime.now(ZoneId.systemDefault()).getOffset();
int diff = myZoneOffset.compareTo(ZoneOffset.UTC);
if (diff < 0) {
System.out.println("" + myZoneOffset + " is ahead of UTC");
} else if (diff > 0) {
System.out.println("" + myZoneOffset + " is behind UTC");
} else {
System.out.println("" + myZoneOffset + " is UTC");
}
我刚在欧洲/哥本哈根时区运行它时,输出为:
+02:00早于UTC
起初compareTo()
认为偏移+02:00 小于 UTC可能使您感到奇怪。我认为逻辑是,他们希望它以偏移的自然顺序出现在 UTC之前,至少对我而言是合理的。
请注意,偏移量会随时间变化。特别是在许多地方,由于夏令时(DST),它随季节而变化。因此,如果您在某个地方看到偏移量在一年中某个时间的UTC之前或之后,那么很容易等于一年中另一时间的UTC,反之亦然。
最后,ZoneId.systemDefault()
为我们提供了JVM的默认时区,它通常与操作系统时区相同,但并非总是如此。