我正在尝试使用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:00 PM时,返回的格式为yyyyMMddHH
而不是dd-MM-yyyyy hhmmssa
。我想问为什么这个差异以及如何解决这个问题?
由于ArrayList
的排序性质>
将所有元素添加到ArrayList
时,它将首先存储以dd
开始,并以yy
结尾。因此,您会看到格式yyyyMMddHH
,因为它是排序中的最后一个。
您可以使用LinkedList
来保持插入顺序。
您需要为SimpleDateFormats设置setLenient(false)。