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

时间:2019-04-09 05:31:12

标签: android date-parsing

我正在寻找一种解析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"

2 个答案:

答案 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)

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级别上使用它,那么它的优点不仅在于它简短,而且更是很难出错。

链接