我正在尝试使用SimpleDateFormat
解析日期(可以是任何格式(。为此,我准备了一个使用SimpleDateFormat
中可用的符号的格式列表,并尝试使用以下代码解析日期字符串:
private Pair<Date,SimpleDateFormat> parseTimeStamp(String input)
{
Pair<Date,SimpleDateFormat> dateTime=null;
for (SimpleDateFormat dateFormat : TIMESTAMP_FORMATS) {
try {
Date temp = dateFormat.parse(input);
dateTime=new Pair<Date, SimpleDateFormat>(temp,dateFormat);
break;
} catch (ParseException e) {
}
}
return dateTime;
}
private static final List<SimpleDateFormat> TIMESTAMP_FORMATS = new ArrayList<SimpleDateFormat>() {{
add(new SimpleDateFormat("yyyyMMddhh:mm:ssa"));
add(new SimpleDateFormat("yyyyMMddhh:mma"));
add(new SimpleDateFormat("yyyyMMddhha"));
add(new SimpleDateFormat("yyyyMMddHH:mm:ss"));
add(new SimpleDateFormat("yyyyMMddHH:mm"));
add(new SimpleDateFormat("yyyyMMddHH"));
add(new SimpleDateFormat("yyyyMMddhhmmssa"));
add(new SimpleDateFormat("yyyyMMddhhmma"));
add(new SimpleDateFormat("yyyyMMddHHmmss"));
add(new SimpleDateFormat("yyyyMMddHHmm"));
add(new SimpleDateFormat("yyyyMMddZ"));
add(new SimpleDateFormat("yyyyMMddz"));
add(new SimpleDateFormat("yyyyMMddX"));
add(new SimpleDateFormat("dd-MM-yyyyhh:mm:ssa"));
add(new SimpleDateFormat("dd-MM-yyyyhh:mma"));
add(new SimpleDateFormat("dd-MM-yyyyhha"));
add(new SimpleDateFormat("dd-MM-yyyyHH:mm:ss"));
add(new SimpleDateFormat("dd-MM-yyyyHH:mm"));
add(new SimpleDateFormat("dd-MM-yyyyHH"));
add(new SimpleDateFormat("dd-MM-yyyyhhmmssa"));
add(new SimpleDateFormat("dd-MM-yyyyhhmma"));
add(new SimpleDateFormat("dd-MM-yyyyHHmmss"));
.
.
.
.
.
.
}
}
当我解析 06-06-2020 1:08:00PM 时,返回的格式是yyyyMMddHH
而不是dd-MM-yyyyy hhmmssa
。
我想问为什么会出现这种差异以及如何解决这个问题?
你需要为 SimpleDateFormats 设置Lenient(false(。
private static final List<SimpleDateFormat> TIMESTAMP_FORMATS = new ArrayList<SimpleDateFormat>() {
{
add(createDf("yyyyMMddhh:mm:ssa"));
// ....
}
};
private static SimpleDateFormat createDf(String s) {
SimpleDateFormat sdf = new SimpleDateFormat(s);
sdf.setLenient(false);
return sdf;
}