从服务器接收的日期不是以特定格式固定的,那么如何检测到哪种格式,以便可以将其转换为特定日期格式并根据功能显示在应用程序中。
以下是一些收到的示例:
2018-09-10T10:35:00.377Z
2018-09-10T10:35:00.12Z
2018-09-10
提前谢谢!
答案 0 :(得分:2)
String[] exampleStrings = {
"2018-09-10T10:35:00.377Z",
"2018-09-10T10:35:00.12Z",
"2018-09-10"
};
for (String example : exampleStrings) {
if (example.contains("T")) {
OffsetDateTime dateTime = OffsetDateTime.parse(example);
System.out.println("Date: " + dateTime.toLocalDate()
+ " Time: " + dateTime.toLocalTime()
+ " Offset: " + dateTime.getOffset());
} else {
LocalDate date = LocalDate.parse(example);
System.out.println("Date: " + date);
}
}
您的格式允许使用ISO 8601的变体。java.time是现代Java日期和时间API,无需任何显式格式化程序即可解析这些格式。前两个示例字符串具有日期和时间以及用于分隔它们的特征T
和UTC的偏移量(Z
表示偏移量0)。第三个只有一个日期。因此,请测试字符串中是否包含T
,然后使用相应的java.time类进行其余操作。
以上代码段的输出为:
Date: 2018-09-10 Time: 10:35:00.377 Offset: Z
Date: 2018-09-10 Time: 10:35:00.120 Offset: Z
Date: 2018-09-10
我不知道您将如何处理其余代码中的两种不同类型的OffsetDateTime
和LocalDate
。如果您不需要时间部分,只需要日期,请使用dateTime.toLocalDate()
来获取LocalDate
,然后在所有情况下都将其传递给您。由于您确实需要时间部分,因此,根据您的情况和要求,您可以摆脱相反的转换:在日期情况下,您可能会从OffsetDateTime
等中获得date.atStartOfDay().atOffset(ZoneOffset.UTC)
,但请这样做检查这是否给您适当的时间。
不过,我确实同意Khemraj现在删除的答案,即您的服务器应该能够提供一种一致的格式,或者至少指出它为您提供的格式。
是的,java.time
在较新的Android设备上都能很好地工作。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。