【问题标题】:Get date from device and convert it to GMT+4从设备获取日期并将其转换为 GMT+4
【发布时间】:2019-02-18 08:20:22
【问题描述】:

我正在尝试查找安卓手机的时区。因为我想获取日期对象,但我想要 GMT+4 格式。我看到的所有其他答案都会转换来自 API 请求(其时区已知)的时间。我怎样才能做到这一点?

其他方法可能是将来自服务器的 GMT+4 时间转换为我设备的本地时间。

【问题讨论】:

  • 使用 java.time,现代 Java 日期和时间 API:OffsetDateTime.now(ZoneOffset.ofHours(4))
  • 如果您的意思是 java.util.Date 对象,则不能有 GMT+4 偏移量(这不是格式,顺便说一句)。 Date 既没有时区、偏移量也没有格式。显然相关:Java: Calculate month end date based on timezone.

标签: android date time


【解决方案1】:

最好使用实时时区,而不仅仅是 +04 的偏移量。例如:

    OffsetDateTime currentDateTimeInGeorgia = OffsetDateTime.now(ZoneId.of("Asia/Tbilisi"));
    System.out.println(currentDateTimeInGeorgia);

这个sn-p只是输出:

2018-09-13T19:18:35.642592+04:00

请替换您自己的时区。如果您坚持使用 GMT+4,请使用ZoneOffset.ofHours(4)

旧的Date 类不能保存偏移量或时区,但现代的OffsetDateTime 可以,顾名思义。 Date 类的设计也很糟糕,因此请考虑使用现代 Java 日期和时间 API java.time。

如您所见,以上不使用设备时区。如果你仍然需要这个:

    ZoneId deviceTimeZone = ZoneId.systemDefault();
    System.out.println(deviceTimeZone);

示例输出:

亚洲/迪拜

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备上(据我所知,从 API 级别 26 开始),现代 API 是内置的。
  • 在 Java 6 和 7 中,获取 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2012-02-15
    • 2015-08-17
    • 2016-06-06
    • 2010-12-10
    • 2018-04-13
    • 2019-12-19
    相关资源
    最近更新 更多