gpt4 book ai didi

java - Joda Time : Exception parsing dates earlier than 1970

转载 作者:行者123 更新时间:2023-12-04 04:57:38 25 4
gpt4 key购买 nike

我有以下用于解析日期的代码:

public Boolean isDate(String date, String dateFormat) {
try {
DateTimeFormat.forPattern(dateFormat).parseDateTime(date);

} catch(Exception e) {
return false;
}

return true;

}

这适用于更近的日期,例如 20071001与格式 yyyyMMdd .但是对于早于 1970 年的日期,例如 19600101yyyyMMdd 格式相同,该方法返回false。

关于如何解决这个问题的任何想法都将不胜感激。

更新:

我得到的异常(exception)是:
Cannot parse "19400101": Illegal instant due to time zone offset transition (Africa/Nairobi)
这就是我调用该方法的方式:
if(validationUtils.isDate(propVal, dateFormat) == false) {
String msg = "Not a valid DATE";
Quartet<String, String, String, String> t = new Quartet<String, String, String, String>(recNo, field, propVal, msg);
errors.add(t);
}

包含 isDate 的类方法是我使用 @Autowired IValidationUtils validationUtils 接线的 bean .这不是我正在做的唯一验证。其他验证内容成功了,这让我得出结论,问题出在 Joda Time 上。

更新(解决方案):

按照@Ettiene 的建议(在下面的答案中),我得到了解决我的问题的方法。修改后的工作代码是:
public Boolean isDate(String date, String dateFormat) {
try {
DateTimeFormatter fmt = DateTimeFormat.forPattern(dateFormat);
DateTime dt = fmt.withZone(DateTimeZone.UTC).parseDateTime(date);

} catch(Exception e) {
return false;
}

return true;

}

最佳答案

这个问题似乎与从冬季时间到夏季时间的过渡有关。问题是由于过渡,某些日期在某些时区无效。

例如,在法国/巴黎时区,2013-03-31T02:30 是无效的,因为从冬令时到夏令时的切换发生在这一天的凌晨 2:00,因此 2013-03-31T01:59 之后的分钟是 2013-03 -31T03:00。

我猜在 1970 年之前的时区 okello 中,过渡发生在 1 月 1 日午夜。因此,1960-01-01T00:00 无效(但 1959-12-31T00:00 和 1960-01-02T00:00 有效)。

请记住,当一天中的小时未指定时,假定为午夜。

关于java - Joda Time : Exception parsing dates earlier than 1970,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564751/

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