java - 使用 OpenCsv 解析 Instant

标签 java java-time opencsv datetime-parsing java.time.instant

我正在尝试通过这种方式使用 OpenCsv 从 CSV 解析 Instant:

@CsvDate("yyyy-MM-dd hh:mm:ss")
@CsvBindByName(column = "date")
private Instant date;

我知道 OpenCsv 应该支持 java.time

但是当尝试使用它时,我收到以下异常:

Error parsing CSV line: 8.

...

Caused by: java.time.format.DateTimeParseException: Text '2022-04-21 00:00:00' could not be parsed: Unable to obtain Instant from TemporalAccessor: {HourOfAmPm=0, MicroOfSecond=0, NanoOfSecond=0, MilliOfSecond=0, MinuteOfHour=0, SecondOfMinute=0},ISO resolved to 2022-04-21 of type java.time.format.Parsed

...

Caused by: java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: {HourOfAmPm=0, MicroOfSecond=0, NanoOfSecond=0, MilliOfSecond=0, MinuteOfHour=0, SecondOfMinute=0},ISO resolved to 2022-04-21 of type java.time.format.Parsed

...

Caused by: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: InstantSeconds

根据我的调查,根本原因是缺少时区,但我的问题是如何仅使用注释指定时区?

最佳答案

参见DateTimeFormatter 。表示 24 小时时间 (0-23) 的时间应为 HHhh 表示 12 小时时间 (1-12)。该错误是由“00”小时引起的。幸运的是,否则你就只有前半天了。

参见 h、k、H 和 K。

Instant不使用秒之类的单位,内部更长时间。使用 LocalDateTime 作为您的格式。

关于java - 使用 OpenCsv 解析 Instant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71771439/

相关文章:

java.time.Instant 不会在消费者端呈现

java - OpenCSV Reader-Java 的局限性

尝试从 jtable 中删除时 Java SQL 语法错误

java - 如何用 Jackson 序列化 LocalDateTime?

java - 如何实例化 Map<String, TreeMap<Integer, Integer>>?

java - 如何使用默认区域解析 ZonedDateTime?

java - JSON 返回上的 opencsv.parseLine 缺少“

java - 如何将数组列表写入 CSV

java - 难以在分隔符处分割字符串并保留它

java - 在Java中修剪字符串的正确方法