查找系统时区是在Java中的UTC之前还是之后

问题描述

我需要确定我当前的系统时区是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的默认时区,它通常与操作系统时区相同,但并非总是如此。