我正在寻找解析字符串日期的解决方案。
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 date的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"
您的传入日期采用yyyy-MM-dd'T'hh:mm:ss
格式,您使用的格式为dd-MMM-yyyy HH:mm:ss a
,不会产生错误。
尝试使用yyyy-MM-dd'T'hh:mm:ss
解析传入的日期字符串,然后根据需要将其转换为其他格式。
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,219-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(JST-310的ThreeTen)。