为什么这个日期字符串没有通过验证?

ulydmbyx  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(378)

对于给定模式yyyy-mm-dd't'hh:mm:ss.sss的字段,我有一个值为2020-03-07t04:11:20.000的json文件。我试着在它的末尾加上一个z,但是它一直没有通过验证。知道为什么吗?
我尝试执行offsetdatetime.parse(mytext,datetimeformatter.ofpattern(mypattern)),但它抛出了datetimeparseexception,无法从temporalaccessor获取offsetdatetime

mlnl4t2r

mlnl4t2r1#

由于模式和输入都没有时区偏移量,因此无法将其直接解析为 OffsetDateTime . 你能做的就是把日期解析为 LocalDateTime 并将偏移量添加到结果中。
例如,使用zoneoffset.utc:

LocalDateTime ldt = LocalDateTime.parse(mytext, DateTimeFormatter.ofPattern(mypattern));
OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC)
m3eecexj

m3eecexj2#

首先,你用错了类, OffsetDateTime 为了你的案子。既然你提到 timezone="UTC" ,您应该使用 ZonedDateTime . 请注意,使用以下注解后,生成的日期和时间如下 2020-03-07T04:11:20.000 UTC .

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS z", timezone="UTC")

你可以解析成 ZonedDateTime 利用这个模式, yyyy-MM-dd'T'HH:mm:ss.SSS z .
演示:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String myPattern = "yyyy-MM-dd'T'HH:mm:ss.SSS z";
        String myText = "2020-03-07T04:11:20.000 UTC";
        System.out.println(ZonedDateTime.parse(myText, DateTimeFormatter.ofPattern(myPattern)));
    }
}

输出:

2020-03-07T04:11:20Z[UTC]

如果您想保持日期时间格式为 2020-03-07T04:11:20.000 那你应该把它拿走 timezone="UTC" 并将获得的日期时间字符串解析为 LocalDateTime 而不是 ZonedDateTime . 不用说,模式应该是 yyyy-MM-dd'T'HH:mm:ss.SSS 那样的话。

相关问题