ISO_OFFSET_DATE_TIME 的日期时间格式模式

问题描述 投票:0回答:3

我正在寻找

ISO_OFFSET_DATE_TIME

的日期时间格式模式
2019-09-30T10:05:16+10:00

yyyy-MM-dd'T'HH:mm:ssZ
对于
2019-09-30T10:05:16+1000
有效,但我需要区域偏移中的冒号

如果这是不可能的,我需要一个正则表达式。

java java-time datetimeformatter
3个回答
4
投票

您需要

uuuu-MM-dd'T'HH:mm:ssXXX

String str = "2019-09-30T10:05:16+10:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
OffsetDateTime datetime = OffsetDateTime.parse(str, formatter);
System.out.println(datetime);

1
投票

这要看情况。

DateTimeFormatter.ISO_OFFSET_DATE_TIME
打印和解析带秒和不带秒以及带或不带秒小数部分的字符串,后者最多 9 位小数。

如果您只需要问题中给出的格式变体的模式,包含秒且不包含秒的小数部分,那么 MC Empire 的答案正是您所需要的。

如果您需要

ISO_OFFSET_DATE_TIME
的全部灵活性,那么没有任何模式可以满足您的需求。然后你需要采用正则表达式的方式。这反过来又很难为您提供像格式化程序一样严格的验证。并且正则表达式可能仍然变得复杂且难以阅读。

链接:我对类似问题的回答还有一些更多细节。


0
投票

您还可以使用 SimpleDateFormat 对其进行格式化。 DateTimeFormatter 需要 Android API 级别26+,带有“X”模式的 SimpleDateFormat 可以与 Android API 级别24+一起使用。

val dateString = "2019-09-30T10:05:16+10:00"
val readFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
val date = readFormat.parse(dateString) // You will get Date(2019-09-30 00:05:16) in UTC.
© www.soinside.com 2019 - 2024. All rights reserved.