Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对不同格式的日期进行排序_Java_Sorting_Jodatime - Fatal编程技术网

Java 如何对不同格式的日期进行排序

Java 如何对不同格式的日期进行排序,java,sorting,jodatime,Java,Sorting,Jodatime,下面的代码将字符串日期转换为DateTimeobj: import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormatter; public class SortByDate { // Date format is (mm/dd/yyyy)

下面的代码将字符串日期转换为
DateTime
obj:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;

public class SortByDate
{
    // Date format is (mm/dd/yyyy)
    private void testSort()
    {

        List<Obj> l = new ArrayList<Obj>();

        Obj o =new Obj();
        o.date = "1/5/2015 1:37:00";
        l.add(o);
        o = new Obj();
        o.date = "1/5/2015 01:38:00";
        l.add(o);
        o = new Obj();
        o.date = "1/5/2015 01:36:00";
        l.add(o);
        o = new Obj();
        o.date = "1/5/2015";
        l.add(o);


        DateTimeFormatter dtf = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");

        List<DateTime> dtl = new ArrayList<DateTime>();
        for(Obj ob : l){
             dtl.add(dtf.parseDateTime(ob.date));
        }

        Collections.sort(dtl);

        for(DateTime d : dtl){
            System.out.println(d);
        }
    }

    public static void main(String args[])
    {
        new SortByDate().testSort();
    }

    private class Obj
    {
        public String date;
    }

}
为了对日期进行降序排序并满足未设置时间的日期的需要,我计划将“23:23:59”附加到格式不正确的字符串中,因此
“1/5/2015”
变成
“1/5/2015 23:59”

是否有更惯用的方法来处理此场景或替代方法?

“MM/dd/yyyy HH:MM:ss”是您的程序所期望的格式。传递另一种格式为“MM/dd/yyyy”的字符串将被正确处理为错误

您可以使用正则表达式检查和不同的日期格式化程序

 if(ob.date.matches(REG_EX_FULLDATE)){
      // use dateFormatter1
  }
 else if(ob.date.matches(REG_EX_SHORTDATE)){
     // use dateFormatter2
 } else {
       throw new RuntimeException();
 }

我认为你没有指定时间的那一行是有问题的。在这种情况下,作为权宜之计,我将附加“00:00:00”(如果部分提供,则附加一个子字符串以完成时间字段)。我很惊讶发生了这样的事,我可能不得不试试你的例子。您可能会认为DateTimeFormatter会假定00:00:00是一个丢失的时间。等等-为什么您要使用org.joda.time中的DateTime和DateTimeFormatter,而不是java.util中的内容。*;包裹我打赌Java不会抛出异常。另外,奇怪的是,您都包含了包的内容,但在dtf定义行上指定了整个包路径。有一种更干净的方法可以做到这一点。
 if(ob.date.matches(REG_EX_FULLDATE)){
      // use dateFormatter1
  }
 else if(ob.date.matches(REG_EX_SHORTDATE)){
     // use dateFormatter2
 } else {
       throw new RuntimeException();
 }