Android 设备时区不正确 returns GMT (00:00) 始终带有 rawOffset 0

Android Devices Timezone Incorrectly returns GMT (00:00) always with rawOffset of 0

过去几天就像一场噩梦,我什至考虑卸载然后重新安装 Android Studio 只是为了看看我的构建是否是问题所在。

我正在做的一个应用程序需要图片中的时间戳,并且时间戳也必须显示时区。 我尝试了通常的

Calendar now = Calendar.getInstance();
TimeZone timeZone = now.getTimeZone();

方法和我拥有的所有 android 测试设备,都返回 GMT 00:00。我花了 2 天时间试图找出为什么所有 stackOveflow 示例都不起作用,并认为这一定是我的构建,因为即使更改设备上的时区仍然会导致 GMT 时间返回。 在我卸载之前,我遇到了解决方案。

解决方案。我找到的答案针对的是另一个问题,但它对我有用。 首先将时区设置为 Null,然后选择正确的设备时区。 如果在模拟器上,时区将保持 UTC。

        TimeZone.setDefault(null);
        System.setProperty("user.timezone", "");
        TimeZone.setDefault(null);

        //get Calendar instance
        Calendar now = Calendar.getInstance();

        //get current TimeZone using getTimeZone method of Calendar class
        TimeZone timeZone = now.getTimeZone();

        //display current TimeZone using getDisplayName() method of TimeZone class
        String strTimeZone=timeZone.getDisplayName(false,TimeZone.SHORT);
        long lngTimeZoneOffset= timeZone.getRawOffset();

我希望这可以节省几天拉头发的时间。