我使用了搜索功能但是有太多不同方法的信息太多了。我只是想在1小时的搜索后解决这个问题。
我从Firestore收到这样的字符串:2018-05-22T10:30:00 + 00:00(如果需要可以更改)
现在我想将时间更改为设备上的本地时区。最后我需要两个不同的字符串,如下所示:
hour: 10:30
date: Tuesday, May 22
答案 0 :(得分:1)
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格式的时间,因为这似乎与您想要的一致。
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。