gpt4 book ai didi

java - Spring Batch - 无法解析格式正确的日期

转载 作者:行者123 更新时间:2023-12-01 10:15:56 25 4
gpt4 key购买 nike

在 Spring 批处理中,我正在加载 csv 文件,我也在其中解析日期。一切似乎都工作正常,除了一行出现异常

无法解析的日期:“2014-03-09 02:07:07”,格式:[yyyy-MM-dd HH:mm:ss]

我已经仔细检查了我的输入文件,并且此失败行中没有特殊/不可见字符。

Caused by: java.lang.IllegalArgumentException: Unparseable date: "2014-03-09 02:07:07", format: [yyyy-MM-dd HH:mm:ss]
at org.springframework.batch.item.file.transform.DefaultFieldSet.parseDate(DefaultFieldSet.java:778)
at org.springframework.batch.item.file.transform.DefaultFieldSet.readDate(DefaultFieldSet.java:595)

感谢您的帮助!

<小时/>

编辑

When I change hour in date from 02 to something else (e.g. '2014-03-09 03:07:07'), it works. When I then change it manually back to 02 it fails again. How can this be possible? Changing other elements of date does not help. Only changing hour.

I only experience this on our unix server with America/New_York timezone. From my local machine everything is working. JDK version on both are identical.

最佳答案

这是由TimeZone组合引起的设置、夏令时和 SimpleDateFormat.lenient属性。

我们的linux主机有America/New_York时区。

我收到错误的日期是 9-MAR-2014 @ 2:07:07 am这是 NYK 时区时移的确切日期和时间 1 hour forward - 夏令时(凌晨 2 点至凌晨 3 点)。

通常,当 SimpleDateFormat 转换此类日期时,它 automatically changes it to 3am 。设置lenient属性至false (默认值为 true )可以防止这种情况并引发异常 - HOUR_OF_DAY: 2 -> 3

这个异常在进程中被消耗,最后我们只得到 IllegalArgumentExceptionUnparseable date: "2014-03-09 02:07:07", format: [yyyy-MM-dd HH:mm:ss]消息。

这里我使用 spring-boot DefaultFieldSet其中有具体设置 lenient 的实现至false .

/* ... some other code ... */
private DateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
{
dateFormat.setLenient(false);
}

/* ... some other code ... */

@Override
public Date readDate(int index, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);
return parseDate(readAndTrim(index), sdf);
}
/* ... some other code ... */

由于我们没有对代码中的日期进行任何操作,因此我只是通过将默认时区更改为 UTC 来修复它。

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

其他有效的方法是编写 FieldSet 的自定义实现.

关于java - Spring Batch - 无法解析格式正确的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com