Hmm格式的java不可解析日期异常SimpleDataFormat
验证给定字符串文本是否为Hmm格式时出现此错误
java.text.ParseException: Unparseable date: "1637"
但这对文本“747”有效
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Validation{
public void validateDateFormat(String format,String text){
SimpleDateFormat sdfrmt = new SimpleDateFormat(format);
sdfrmt.setLenient(false);
Date testDate = null;
try {
testDate = sdfrmt.parse(text);
} catch (ParseException e) {
System.out.println("dateFormat Exception :");
e.printStackTrace();
}
}
public static void main(String []args){
Validation val = new Validation();
val.validateDateFormat("Hmm","747"); //working
val.validateDateFormat("Hmm","1637");//not working
}
}
这用于验证上载文件中的给定列。因此,根据在配置中为每列编写的格式,将其编写为动态的
# 1 楼答案
嗯,它应该能起作用
但是您应该使用
java.time
包中提供的更新的Java日期和时间API(JSR 310)如果然后用
LocalTime
替换Date
,用DateTimeFormatter
替换SimpleDateFormat
(使用ofPattern
工厂方法),用DateTimeParseException
,it'll work替换ParseException
# 2 楼答案
发生这种情况是因为
SimpleDateFormat
无法使用您给定的格式解析给定的日期让我们理解一下——你的格式是
Hmm
,你把日期定为747
,当然,在解析过程中,日期的第一个字母7
被映射到格式的第一个字母“H”,即小时,而47
被映射到mm
即分钟,因此它能够正确转换,但对于下一个日期1637
,它失败了,因为它不知道分配给H
以下是一些选项,您可以尝试使其更通用,选择格式,如
HHmm
,并始终给出长度为4的日期,例如747
输入为0747
,它应该可以工作或者选择一种更清晰的格式供解析器映射,例如,您可以选择格式为
H:mm
,输入为7:47
或16:37
。因为在小时和分钟之间有一个分隔符:
,解析器将能够解析所有类型的时间,而不管给定输入的长度是3还是4