如何解析2019-02-17T18:39:03?

How to parse 2019-02-17T18:39:03?

我正在寻找解析字符串日期的解决方案。

 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"

您的传入日期格式为 yyyy-MM-dd'T'hh:mm:ss,您使用的格式为 dd-MMM-yyyy HH:mm:ss a,不会产生错误。

尝试使用 yyyy-MM-dd'T'hh:mm:ss 解析传入的日期字符串,然后根据需要将其转换为其他格式。

java.time

    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水平上使用,好处不仅在于简洁,更在于不易出错

链接