首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OffsetDateTime格式和解析

OffsetDateTime格式和解析
EN

Stack Overflow用户
提问于 2020-11-27 16:48:47
回答 1查看 2.7K关注 0票数 3

这段代码

代码语言:javascript
复制
String formattedDate = OffsetDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE);
OffsetDateTime.parse(formattedDate, DateTimeFormatter.ISO_OFFSET_DATE);

通向

java.time.format.DateTimeParseException:文本“2020-11-27 +01:00”无法解析:无法从TemporalAccessor获得OffsetDateTime:{OffsetSeconds=3600},ISO已解析为java.time.format.Parsed类型的2020-11-27。

这不管用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 17:05:26

顾名思义,OffsetDateTime需要时间分量(小时、分钟等)也是。DateTimeFormatter.ISO_OFFSET_DATE没有时间组件的模式,因此不应该使用它将日期字符串解析为OffsetDateTime。您可以使用默认时间组件构建格式化程序。

代码语言:javascript
复制
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String formattedDate = OffsetDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE);
        System.out.println(formattedDate);

        DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                .append(DateTimeFormatter.ISO_OFFSET_DATE)
                                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                                .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                                .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                                .toFormatter(Locale.ENGLISH);

        OffsetDateTime odt = OffsetDateTime.parse(formattedDate, dtf);
        System.out.println(odt);
        System.out.println(DateTimeFormatter.ISO_OFFSET_DATE.format(odt));
    }
}

输出:

代码语言:javascript
复制
2020-11-27Z
2020-11-27T00:00Z
2020-11-27Z
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65040964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档