Java 时间排序器:12小时时钟

Java 时间排序器:12小时时钟,java,sorting,time,compareto,Java,Sorting,Time,Compareto,我想按顺序对这些时间进行排序: 4:05 AM 5:04 PM 6:04 AM 4:05 PM 5:04 AM 12:01 AM 12:01 PM 使用时间类与 public int compareTo(Time t) 方法 if(this.getMeridians() != t.getMeridians()) return this.getMeridians().compareTo(t.getMeridians()); 对上午和下午进行排序,但我不知道如何对小时和分钟进行排序。 它

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

4:05 AM
5:04 PM
6:04 AM
4:05 PM
5:04 AM
12:01 AM
12:01 PM
使用时间类与

public int compareTo(Time t)
方法

if(this.getMeridians() != t.getMeridians())
   return this.getMeridians().compareTo(t.getMeridians());
对上午和下午进行排序,但我不知道如何对小时和分钟进行排序。 它是12小时制,所以12点01分应该排在第一位。为了做到这一点,我应该如何填写compareTo(时间t)

应该是这样的

12:01 AM
4:05 AM
5:04 AM
6:04 AM
12:01 PM    
4:05 PM
5:04 PM
  • 将这些字符串解析为
    Date
    对象
  • 把它们收集起来
  • 用于对集合进行排序

    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));
    }
    
    导入java.text.DateFormat;
    导入java.text.ParseException;
    导入java.text.simpleDataFormat;
    导入java.util.ArrayList;
    导入java.util.Collections;
    导入java.util.Date;
    导入java.util.List;
    导入java.util.Locale;
    字符串[]sArr=新字符串[]{“上午4:05”、“下午5:04”、“上午6:04”,
    “下午4:05”、“上午5:04”、“上午12:01”、“下午12:01”};
    DateFormat DateFormat=新的SimpleDateFormat(“hh:mm a”,Locale.US);
    列表日期=新建ArrayList();
    试一试{
    用于(字符串s:sArr){
    Date-Date=dateFormat.parse;
    日期。添加(日期);
    }
    }捕获(解析异常){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }
    集合。排序(日期);
    用于(日期:日期){
    System.out.println(dateFormat.format(date));
    }
    
  • 答案是正确的

    为了好玩,我使用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() ) );
    
    当运行时

    未排序:[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]
    排序:[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中使用格式化程序创建字符串的示例(“打印”方法)。

    您大约在一个或两个小时前发布了这个完全相同的问题。我告诉过你让它用有问题的语言来标记它,但是看起来你已经删除了它并重新发布了它。请标记您的问题!这不是一种语言——总是用一种语言来标记你的问题,例如C、C++、C、VB、JS、java、PHP等等。你的问题现在会有更多的曝光时间。12:01 AM vs 00:01 AM?应该是12:01 AM