微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在android中获取时区偏移量>

如何解决如何在android中获取时区偏移量>

如何在 android - java 中获取时区偏移量? 出现本地日期时间错误

 public static String getoffsetTimeZone() {
    TimeZone timeZone = TimeZone.getDefault();
    Timber.e(": %s",timeZone.getoffset(Calendar.ZONE_OFFSET));
    Timber.e(" timeZone.getID(): %s",timeZone.getID());

    String myTimeZone = ZoneId.systemDefault().getId();
    LocalDateTime dt = LocalDateTime.Now();
    LocalDate dt0 = LocalDate.Now(); // Added 1.8


    ZoneId zone = ZoneId.of(myTimeZone);
    zoneddatetime zdt = dt.atZone(zone);
    ZoneOffset offset = zdt.getoffset();
    int secondsOfHour = offset.getTotalSeconds() % (60 * 60);
    String out = String.format("%35s %10s%n"," zone= "+ zone," offset= "+ offset);
    Timber.e("out= " + out);
    return "UTC";
}

解决方法

您可以简单地使用以下内容来获取它。这将为您提供当前的偏移量。

Integer offset  = ZonedDateTime.now().getOffset().getTotalSeconds();
,

tl;博士

ZoneId
.systemDefault()
.getRules()
.getOffset(
    Instant.now()
)

详情

切勿使用 TimeZone。该类是与最早版本的 Java 捆绑在一起的遗留日期时间类之一。多年前由 JSR 310 中定义的现代 java.time 类补充。

永远不要调用 LocalDateTime.now()。该类不能代表片刻,因为它故意缺少任何时区概念或与 UTC 的偏移量。我无法想象调用该方法是正确做法的场景。

获取 JVM 当前的默认时区。

ZoneId zone = ZoneId.systemDefault() ;

获取该区域的规则,该特定区域的人们使用的偏移量的过去、现在和未来变化的历史。

ZoneRules rules = zone.getRules() ;

捕捉当前时刻。

Instant instant = Instant.now() ;

获取该区域当时有效的偏移量,产生 ZoneOffset

ZoneOffset offset = rules.getOffset( instant ) ;

java.time 类出现在 Android 26 及更高版本中。对于早期的 Android,现代工具通过“API 脱糖”提供大部分功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。