java - 如何在android中将任何类型的日期转换为特定格式?
问题描述
从服务器接收的日期不固定为特定格式,那么我如何检测正在获取的格式,以便我可以将其转换为特定的日期格式并根据功能显示在应用程序中。
以下是一些收到的示例:
2018-09-10T10:35:00.377Z
2018-09-10T10:35:00.12Z
2018-09-10
提前致谢!
解决方案
java.time
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()
获取 aLocalDate
并在所有情况下传递此类型。由于您确实需要时间部分,因此根据您的情况和要求,您可以避免相反的转换:在日期情况下,您可能会得到OffsetDateTime
from 例如date.atStartOfDay().atOffset(ZoneOffset.UTC)
,但请检查这是否给您适当的时间。
不过,我确实同意 Khemraj 现在删除的答案,即您的服务器应该能够提供一种一致的格式,或者至少指出它为您提供的格式。
问题:我可以在 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
子包中导入日期和时间类。
链接
- 维基百科文章:ISO 8601
- Oracle 教程:日期时间解释如何使用
java.time
. - Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- environment - 如何从 ExternalStorage 和多字体设置字体
- python - 图像生成器缺少 unet keras 的位置参数
- javascript - 使用 ng-template 清空原生元素
- javafx - 是否可以在 Querydsl (DerbyDB) 中调用存储过程
- ruby-on-rails - Ruby:-- 接受数组作为输入并将其放入散列
- ios - iOS CocoaHttpServer 适用于模拟器但不适用于设备
- python - 所有子集的岭回归均方根误差高于总集
- curl - Unix中的curl命令给出异常
- apache-edgent - 如何过滤 Apache Edgent 并显示被过滤的值?
- node.js - 如何将 Dynamo db 与 Express Angular 应用程序连接起来