【问题标题】:Getting current location timezone [duplicate]获取当前位置时区 [重复]
【发布时间】:2018-01-21 14:26:29
【问题描述】:

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

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

【问题讨论】:

    标签: android timezone


    【解决方案1】:

    由于时区往往存在夏令时 (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 包中导入日期和时间类。请参阅下面的链接。

    链接

    【讨论】:

      【解决方案2】:

      试试这个

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

      【讨论】:

        猜你喜欢
        • 2019-12-15
        • 2012-10-26
        • 2016-09-06
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 2012-12-22
        • 2013-07-09
        • 1970-01-01
        相关资源
        最近更新 更多