首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java中对字符串格式的日期进行排序?

如何在java中对字符串格式的日期进行排序?
EN

Stack Overflow用户
提问于 2013-01-22 13:13:51
回答 5查看 81.3K关注 0票数 38

我有一个包含字符串值的arraylist,比如

代码语言:javascript
复制
ArrayList<String> datestring=new ArrayList<String>();
datestring.add("01/21/2013 @03:13 PM");
datestring.add("01/21/2013 @04:37 PM");
datestring.add("01/21/2013 @10:41 AM");
datestring.add("01/21/2013 @10:48 AM");
datestring.add("01/22/2013 @06:16 AM");
datestring.add("01/22/2013 @06:19 AM");
datestring.add("01/21/2013 @05:19 PM");
datestring.add("01/21/2013 @05:19 PM");

有没有人能帮我整理一下上面的列表?以便根据AM和PM格式对值进行排序。

排序后的预期输出应为

代码语言:javascript
复制
for (String s : datestring)
{
    System.out.println(s);
}

代码语言:javascript
复制
01/21/2013 @10:41 AM;
01/21/2013 @10:48 AM;
01/21/2013 @03:13 PM;
01/21/2013 @04:37 PM;
01/21/2013 @05:16 PM;
01/21/2013 @05:19 PM;
01/22/2013 @06:16 AM;
01/22/2013 @06:19 AM;
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-22 13:33:58

尝尝这个

代码语言:javascript
复制
    Collections.sort(datestring, new Comparator<String>() {
        DateFormat f = new SimpleDateFormat("MM/dd/yyyy '@'hh:mm 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);
            }
        }
    });

或者使用Java 8

代码语言:javascript
复制
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy '@'hh:mm a");
    Collections.sort(datestring, (s1, s2) -> LocalDateTime.parse(s1, formatter).
            compareTo(LocalDateTime.parse(s2, formatter)));
票数 96
EN

Stack Overflow用户

发布于 2018-01-15 16:47:43

可以使用下面给出的compareTo比较字符串格式的日期列表。

代码语言:javascript
复制
ArrayList<String> datestring=new ArrayList<String>();
datestring.add("01/21/2013 @03:13 PM");
datestring.add("01/21/2013 @04:37 PM");
datestring.add("01/21/2013 @10:41 AM");
datestring.add("01/21/2013 @10:48 AM");
datestring.add("01/22/2013 @06:16 AM");
datestring.add("01/22/2013 @06:19 AM");
datestring.add("01/21/2013 @05:19 PM");
datestring.add("01/21/2013 @05:19 PM");

Collections.sort(datestring, new Comparator<String>() {
                @Override
                public int compare(String object1, String object2) {
                    return object1.compareTo(object2);
                }
            });

通过使用它,您甚至不必将字符串解析为日期

票数 10
EN

Stack Overflow用户

发布于 2017-05-16 00:47:04

一种选择是将日期添加到TreeMap中,使用未格式化的日期作为关键字,格式化的日期作为值。使用TreeMap将自动对值进行排序。

代码语言:javascript
复制
private ArrayList<String> sortDates(ArrayList<String> dates) throws ParseException {
    SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy");
    Map <Date, String> dateFormatMap = new TreeMap<>();
    for (String date: dates)
        dateFormatMap.put(f.parse(date), date);
    return new ArrayList<>(dateFormatMap.values());
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14451976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档