【问题标题】:TimeSorter: 12 hour clockTimeSorter:12 小时制
【发布时间】:2013-12-07 23:03:49
【问题描述】:

我想按顺序对这些时间进行排序:

4:05 AM
5:04 PM
6:04 AM
4:05 PM
5:04 AM
12:01 AM
12:01 PM

使用 Time 类

public int compareTo(Time t)

方法。

if(this.getMeridians() != t.getMeridians())
   return this.getMeridians().compareTo(t.getMeridians());

对上午和下午进行排序,但我不知道如何对小时和分钟进行排序。 它采用 12 小时制形式,因此 12:01 AM 应该是列表中的第一个。为此,我应该如何填写 compareTo(Time t)?

应该是这样的。

12:01 AM
4:05 AM
5:04 AM
6:04 AM
12:01 PM    
4:05 PM
5:04 PM

【问题讨论】:

  • 您在大约一小时或两小时前发布了同样的问题。我告诉你edit它用相关语言标记它,但看起来你已经删除它并重新发布它。请标记您的问题!
  • 这不是一种语言——总是用一种语言来标记你的问题,例如C、C++、C#、VB、JS、Java、PHP等
  • 干得好。你的问题现在会得到更多的曝光。
  • 12:01 AM vs 00:01 AM?
  • 应该是凌晨 12:01

标签: java sorting time compareto


【解决方案1】:
  1. 将这些字符串解析为Date 对象
  2. 将它们放在一个集合中
  3. 使用collection.sort() 对集合进行排序

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;
    
    String[] sArr = new String[] { "4:05 AM", "5:04 PM", "6:04 AM",
            "4:05 PM", "5:04 AM", "12:01 AM", "12:01 PM"};
    
    DateFormat dateFormat = new SimpleDateFormat("hh:mm a", Locale.US);
    List<Date> dates = new ArrayList<Date>();
    try {
        for (String s : sArr) {
            Date date = dateFormat.parse(s);
            dates.add(date);
        }
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    Collections.sort(dates);
    
    for (Date date : dates) {
        System.out.println(dateFormat.format(date));
    }
    

【讨论】:

    【解决方案2】:

    answer by Guy 是正确的。

    为了好玩,我编写了相同类型的代码,但使用了 Joda-Time 2.3 库。

    我的代码假设您真的只想要时间,没有日期。因此,您将无法处理夏令时或其他问题。

    // © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
    // import org.joda.time.*;
    // import org.joda.time.format.*;
    
    DateTimeFormatter formatter = DateTimeFormat.forPattern( "hh:mm a" );
    // LocalTime time = formatter.parseLocalTime( "4:05 PM" );
    
    // Create a list of org.joda.time.LocalTime instances, created by parsing strings.
    List list = new ArrayList( 7 );
    list.add( formatter.parseLocalTime( "4:05 AM" ) );
    list.add( formatter.parseLocalTime( "5:04 PM" ) );
    list.add( formatter.parseLocalTime( "6:04 AM" ) );
    list.add( formatter.parseLocalTime( "4:05 PM" ) );
    list.add( formatter.parseLocalTime( "5:04 AM" ) );
    list.add( formatter.parseLocalTime( "12:01 AM" ) );
    list.add( formatter.parseLocalTime( "12:01 PM" ) );
    System.out.println( "Unsorted: " + Arrays.toString( list.toArray() ) );
    
    // Sort that list.
    Collections.sort( list );
    System.out.println( "Sorted: " + Arrays.toString( list.toArray() ) );
    

    运行时……

    Unsorted: [04:05:00.000, 17:04:00.000, 06:04:00.000, 16:05:00.000, 05:04:00.000, 00:01:00.000, 12:01:00.000]
    Sorted: [00:01:00.000, 04:05:00.000, 05:04:00.000, 06:04:00.000, 12:01:00.000, 16:05:00.000, 17:04:00.000]
    

    如果您需要再次以 AM/PM 格式输出值,请搜索 StackOverflow.com 以获取在 Joda-Time 中使用格式化程序创建字符串的示例(“打印”方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2019-05-22
      • 2018-04-13
      • 1970-01-01
      • 2014-11-20
      • 2021-05-31
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多