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

问题描述 投票:-1回答:2

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

 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"
android date-parsing
2个回答
1
投票

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

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


1
投票

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,219-02-17T18:39:07]

您的字符串采用ISO 8601格式,这是日期和时间格式的国际标准。 LocalDateTime和java.time的其他类,现代Java日期和时间API,解析(和打印)ISO 8601格式作为它们的默认格式,即没有任何明确的格式化程序。

Comparator.comparing在Java 8中引入并接受lambda或(如此处)方法引用。如果你可以在你的API级别上使用它,那么优势不仅在于它的简短,而且更是难以出错。

链接

© www.soinside.com 2019 - 2024. All rights reserved.