我的java应用程序中有一个表示日期的字符串列表。格式为yyyy / MM / dd。我希望能够获取所有这些字符串并将它们转换为实际的日期对象,以便可以对它们执行算术运算。
基本上我想查看列表并删除已经发生的日期。我附上了代码。
List<String> datesList = new ArrayList<String>();
datesList.add("2011-11-01");
datesList.add("2015-11-01");
//Get todays date and format it
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");
//This string will also need to be converted to a date object so the loop arithmetic can be performed.
String today = formatter.format(currentDate.getTime());
System.out.println(today);
for(String date: datesList) {
//The list cannot change from a list of strings.
//So the conversion will probably have to take place in this loop.
System.out.println(date);
//if(date < today) ...
//datesList.remove(date);
}
更新以包含解决方案:
List<String> datesList = new ArrayList<String>();
datesList.add("2013-11-01");
datesList.add("2011-11-01");
datesList.add("2013-04-29");
datesList.add("2001-05-19");
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");
List<String> validDatesList = new ArrayList<String>();
for(String date: datesList) {
Date listItem = formatter.parse(date);
Date todayDate = new Date();
if(todayDate.after(listItem)) {
System.out.println(listItem+" has already happened because today is "+todayDate);
} else{
validDatesList.add(date);
}
}
for(String validDate: validDatesList) {
System.out.println("Valid date: "+validDate);
}
感谢。
答案 0 :(得分:1)
您也可以使用SimpleDateFormat
对象将字符串解析为Date
对象:
Date d = formatter.parse(today);
,其中today
是您String
格式的日期。
然后检查是否在今天之后,获得当前日期如下:
Date today = currentDate.getTime();
,你的if语句如下:
(if d.after(today)) {
datesList.remove(date);
答案 1 :(得分:1)
使用此解析日期,然后您可以将日期与今天的日期进行比较
Date newDate = formatter.parse(date);
Date todayDate = new Date();
if(todayDate.after(newDate)) {
}
答案 2 :(得分:0)
一种完全不同且效率较低的方法:将今天的日期添加到列表中,对列表进行排序,并删除索引比today
更大/更小(取决于排序顺序)的所有列表项。请注意,这仅适用于您指定的日期格式(“yyyy-MM-dd”)(带有前导零!),只有删除以前的日期是您唯一要执行的操作才有意义。
答案 3 :(得分:0)
我建议你把日期换成长,然后你的工作会容易得多。
Date d1 = new Date();//current time
d1.getTime()/1000;//will give you current time as a long value in second.