friend 们,我有一个包含日期记录的字符串
String date=10-Oct-2012 @12-Oct-2012 @$12-Oct-2012 @12-Oct-2012 @$12-Sept-2012 13:50@12-Oct-2012 13:50@$12-Feb-2012 13:50@12-Oct-2012 13:50@$
List<Date> myList=new ArrayList<Date>() ;
我需要比较日期10-Oct-2012,12-OCt-2012,12-Sept-2012,12-Feb-2012
即每个奇数日期,以便我可以将它们排列按时间顺序排列。我对此实现感到困惑,请为我提供解决问题的指导/提示。
在这种情况下,按时间顺序排列后的解决方案将是 12-Feb-2012 @12-Oct-2012 @12-Sept-2012 @12-Oct-2012 @$10-Oct-2012 @12-Oct- 2012 @$12-Oct-2012 @12-Oct-2012
friend 们,为了解决这个问题,我创建了一个 HashMap ,我计划将第一个日期保存为键,将整个字符串保存为值。
String[] tokens=date.split("\\$");
demo[0]=demo[0].replaceAll("-", ".");
if(tokens.length>0)
{
for(int iTmp=tokens.length-1;iTmp>=0;iTmp--)
{
String []demo = tokens[iTmp].split("\\@");
demo[0] = demo[0].replace("Jan", "1")
.replace("Feb", "2").replace("March","3").replace("April","4").replace("May","5").replace("Jun","6").replace("July","7").replace("Aug","8")
.replace("Sept","9").replace("Oct","10").replace("Nov","11").replace("Dec","12");
demo[0]=demo[0]+" 00:05:00";
Date date1 = null;
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yy");
try {
date1 = (Date)formatter.parse(demo[0]);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myList.add(date1);
System.out.println("ADDED DATE IS"+date1);
//System.out.println("KEY VALUE PAIRS "+key+" "+tokens[iTmp]);
}
}
System.out.println("READING LISTs");
for(int iTmp=0;iTmp<myList.size();iTmp++)
{
System.out.println(myList.get(iTmp));
}
Collections.sort(myList);
System.out.println("After Sorting");
for(int iTmp=0;iTmp<myList.size();iTmp++)
{
System.out.println(myList.get(iTmp));
System.out.println();
}
最佳答案
对我来说听起来很简单:
- 将每个值解析为更合适的类型(
日历
、日期
、Joda Time 的LocalDate
) - 按自然顺序排序
(在我看来,使用 Joda Time 是首选选项,因为 Calendar
和 Date
都不真正代表“只是一个日期”;您必须将所有值放入相同的时区等)
我绝对不建议尝试将它们作为字符串进行比较。像往常一样,尽早将数据转换为最适合其试图表示的信息的类型 - 并尽可能晚地将其转换为序列化表示形式(例如用于存储、传播到 Web 服务等)。
关于java - 按时间顺序对日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856163/