如何对不同格式的日期进行排序
How to sort date of different formats
下面的代码将字符串日期转换为 DateTime
对象:
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;
}
}
但我收到异常:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "1/5/2015" is too short
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
为了对日期进行降序排序并满足没有设置时间的日期,我计划将“23:23:59”附加到格式不正确的字符串中,因此 "1/5/2015"
变为 "1/5/2015 23: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();
}
下面的代码将字符串日期转换为 DateTime
对象:
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;
}
}
但我收到异常:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "1/5/2015" is too short
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
为了对日期进行降序排序并满足没有设置时间的日期,我计划将“23:23:59”附加到格式不正确的字符串中,因此 "1/5/2015"
变为 "1/5/2015 23: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();
}