我正在寻找一种解析String日期的解决方案。
datestring.add("2019-02-17T18:39:02");
datestring.add("2019-02-17T18:39:01");
datestring.add("2019-02-17T18:39:03");
datestring.add("2019-02-17T18:39:07");
datastring是String日期的ArrayList。
Collections.sort(datestring, new Comparator<String>() {
DateFormat f = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss a");
@Override
public int compare(String o1, String o2) {
try {
return f.parse(o1).compareTo(f.parse(o2));
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
});
因此,我在这里尝试根据日期对列表进行排序。 但是我得到了ParseException:-
Caused by: java.lang.IllegalArgumentException: java.text.ParseException: Unparseable date: "2019-02-17T18:39:07"
答案 0 :(得分:1)
您的输入日期格式为yyyy-MM-dd'T'hh:mm:ss
,而您使用的格式为dd-MMM-yyyy HH:mm:ss a
,不会产生错误。
尝试使用yyyy-MM-dd'T'hh:mm:ss
解析输入的日期字符串,然后根据需要将其转换为其他格式。
答案 1 :(得分:1)
List<String> datestring = new ArrayList<String>();
datestring.add("2019-02-17T18:39:02");
datestring.add("2019-02-17T18:39:01");
datestring.add("2019-02-17T18:39:03");
datestring.add("2019-02-17T18:39:07");
Collections.sort(datestring, Comparator.comparing(LocalDateTime::parse));
System.out.println(datestring);
此代码段的输出为:
[2019-02-17T18:39:01,2019-02-17T18:39:02,2019-02-17T18:39:03,2019-02-17T18:39:07]
您的字符串采用ISO 8601格式,这是日期和时间格式的国际标准。 LocalDateTime
和其他Java.time类(现代的Java日期和时间API)将默认解析(和打印)ISO 8601格式,即没有任何显式格式化程序。
Comparator.comparing
是Java 8中引入的,它接受lambda或作为方法引用(如此处所示)。如果您可以在API级别上使用它,那么它的优点不仅在于它简短,而且更是很难出错。
java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。