在Android上将GMT + 0时间转换为本地时间,并将Hours / Min作为字符串

时间:2018-05-22 14:31:24

标签: java android date datetime-format

我使用了搜索功能但是有太多不同方法的信息太多了。我只是想在1小时的搜索后解决这个问题。

我从Firestore收到这样的字符串:2018-05-22T10:30:00 + 00:00(如果需要可以更改)

现在我想将时间更改为设备上的本地时区。最后我需要两个不同的字符串,如下所示:

hour: 10:30
date: Tuesday, May 22

1 个答案:

答案 0 :(得分:1)

java.time

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("EEEE, MMMM d", Locale.ENGLISH);

    String stringFromFirestore = "2018-05-22T10:30:00+00:00";

    ZonedDateTime dateTime = OffsetDateTime.parse(stringFromFirestore)
            .atZoneSameInstant(ZoneId.systemDefault());
    System.out.println("hour: " + dateTime.toLocalTime());
    System.out.println("date: " + dateTime.format(dateFormatter));

我在我的时区,欧洲/哥本哈根运行了代码,并得到了以下输出,因为我在5月的偏移+02:00

hour: 12:30
date: Tuesday, May 22

您从Firestore获得的字符串采用ISO 8601格式,即国际标准。 OffsetDateTime和其他java.time类将ISO 8601解析为默认值,即没有任何显式格式化程序。我也使用LocalTime.toString()来生成ISO 8601格式的时间,因为这似乎与您想要的一致。

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

是的,java.time适用于较旧和较新的Android设备。它只需要至少Java 6

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

链接