1

我在日期时间格式模式之后ISO_OFFSET_DATE_TIME

2019-09-30T10:05:16+10:00

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

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

4

3 回答 3

3

你需要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);
于 2020-10-21T07:30:26.773 回答
0

您可以使用yyyy-MM-dd'T'HH:mm:ssZZZZZuuuu-MM-dd'T'HH:mm:ssXXX

演示:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "2019-09-30T10:05:16+10:00";
        OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
        // Default format i.e. OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZZZZZ")));
        System.out.println(odt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")));
    }
}

输出:

2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
2019-09-30T10:05:16+10:00
于 2020-10-21T21:28:17.343 回答
0

这取决于。DateTimeFormatter.ISO_OFFSET_DATE_TIME打印和解析带和不带秒以及带和不带小数秒的字符串,后者最多 9 位小数。

如果您只需要问题中给出的格式变体的模式,有秒数,没有秒数,那么 MC Emperor 的答案正是您所需要的。

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

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

于 2020-10-21T20:05:10.570 回答