获取当前位置时区



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

如果我移动 acrros 时区边框,我的手机会自动更改时间。是否可以获得由此产生的偏移量?

由于时区往往具有夏令时 (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.time,现代Java日期和时间API。我被告知它是内置在较新的Android设备上的。要在较旧的设备上使用它,请获取ThreeTenABP,将其添加到您的项目中,并确保从org.threeten.bp包中导入日期和时间类。请参阅下面的链接。

链接

  • Oracle 教程:日期时间,介绍如何使用java.time
  • Java 规范请求 (JSR) 310,其中首次描述了java.time
  • ThreeTen Backport 项目,将java.time向 Java 6 和 7 的反向移植(JSR-310 为 ThreeTen )。
  • ThreeTenABP,ThreeTen Backport 的安卓版
  • 问:如何在Android项目中使用ThreeTenABP,并进行了非常详尽的解释。

试试这个

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

相关内容

  • 没有找到相关文章

最新更新