在Android上如何根据当前位置获取UTC的时区偏移量?我不想使用任何第三方Web服务或将tz_world数据库包含到我的应用程序中。
如果我移动acrros时区边框,我的手机会自动更改时间。是否有可能获得对此的偏移?
答案 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
包导入日期和时间类。请参阅以下链接。
java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。