当前位置: 首页 > 知识库问答 >
问题:

OffsetDateTime格式化和解析

范鸿畅
2023-03-14

此代码

String formattedDate = OffsetDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE);
OffsetDateTime.parse(formattedDate, DateTimeFormatter.ISO_OFFSET_DATE);

导致

Java语言时间总体安排DateTimeParseException:无法分析文本“2020-11-27 01:00”:无法从TemporalAccessor获取OffsetDateTime:{OffsetSeconds=3600},ISO解析为java类型的2020-11-27。时间总体安排已解析

这不管用吗?

共有1个答案

钱焕
2023-03-14

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

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));
    }
}

输出:

2020-11-27Z
2020-11-27T00:00Z
2020-11-27Z
 类似资料:
  • Go使用模式匹配的方式来支持日期格式化和解析。 package main import "fmt" import "time" func main() { p := fmt.Println // 这里有一个根据RFC3339来格式化日期的例子 t := time.Now() p(t.Format("2006-01-02T15:04:05Z07:00")) /

  • 问题内容: 我以不同的形式发布了相同的问题,但没有人回答。我没有清楚了解angular js中Formatter和Parsers的功能。 根据定义,格式化程序和解析器都与我相似。也许我错了,因为我是这个angularjs的新手。 格式化程序定义 每当模型值更改时,作为管道执行的函数数组。 依次调用每个函数,将值传递给下一个。用于格式化/转换值以在控件和验证中显示。 解析器定义 每当控件从DOM读取

  • 我有一个用于JSON解析的API,它需要一个DateTimeFormatter实例,以便将日期时间字符串解析为OffsetDateTime。但是,我总是遇到一个异常,无法从临时Accessor{}获取ZoneOffset,ISO解析为2021-08-17T13:26:49,类型为java。时间总体安排解析后的API使用OffsetDateTime。解析(字符串、日期格式化程序)。 我必须如何创建D

  • 我试图输出一个OffsetDateTime从我的Spring应用程序,并在我的application.properties这些属性: 但是,当返回日期时,其格式为 如何在Spring应用程序中正确配置日期格式?

  • 我们可以看到格式化就是通过格式字符串得到特定格式: format!("{}", foo) -> "3735928559" format!("0x{:X}", foo) -> "0xDEADBEEF" format!("0o{:o}", foo) -> "0o33653337357" 根据使用的参数类型,同样的变量(foo)能够格式化成不同的形式:X, o 和未指定形式。 这个格式化的功能是通过 t

  • 本文向大家介绍python字符串格式化方式解析,包括了python字符串格式化方式解析的使用技巧和注意事项,需要的朋友参考一下 1.%格式符 这种格式化并不是很好,因为它很冗长并且容易导致错误,比如没有正确显示元组或字典 2.str.format() 在处理多个参数和更长的字符串时仍然可能非常冗长 3.f-Strings f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表