获取当前位置时区

时间:2018-01-21 14:26:29

标签: android timezone

在Android上如何根据当前位置获取UTC的时区偏移量?我不想使用任何第三方Web服务或将tz_world数据库包含到我的应用程序中。

如果我移动acrros时区边框,我的手机会自动更改时间。是否有可能获得对此的偏移?

2 个答案:

答案 0 :(得分:2)

试试这个

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Log.d("Time zone: "+tz.getDisplayName());

答案 1 :(得分:2)

由于时区往往有夏令时(DST)和其他异常,因此获取时区和从UTC获得偏移之间存在差异。后者不仅需要一个地点,还需要一年中的一个时间。

获得时区的现代方式:

    ZoneId timeZone = ZoneId.systemDefault();

在我的Mac上,我得到Europe/Copenhagen。但是,请注意,这给您带来的是JVM的时区设置。当设备的设置发生变化时,这不会改变。更糟糕的是,JVM设置可能会从程序的其他部分或在同一JVM中运行的其他程序中更改。只有在重新启动JVM时,它才会获取设备设置。

获取UTC的当前偏移量:

    ZoneOffset offsetFromUtc = timeZone.getRules().getOffset(Instant.now());

就我而言,我得到+01:00。如果您想要一年中另一个时间的偏移量,请传递不同的Instant

我使用的是现代Java日期和时间API java.time。我被告知它内置在较新的Android设备上。要在旧设备上使用它,请获取ThreeTenABP,将其添加到项目中,并确保从org.threeten.bp包导入日期和时间类。请参阅以下链接。

链接