0

我的 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);
        }

谢谢。

4

4 回答 4

1

您也可以使用SimpleDateFormat对象将字符串解析为Date对象:

Date d = formatter.parse(today);today您的日期String格式在哪里。

然后检查是否敢在今天之后,得到当前日期如下:

Date today = currentDate.getTime();

,您的 if 语句将如下所示:

(if d.after(today)) {
    datesList.remove(date);
于 2013-04-29T18:58:59.033 回答
1

用这个解析你的日期,然后你可以将日期与今天的日期进行比较

Date newDate = formatter.parse(date);
Date todayDate = new Date();
if(todayDate.after(newDate)) {

}
于 2013-04-29T19:00:03.860 回答
0

一种完全不同且效率较低的方法:将今天的日期添加到列表中,对列表进行排序,然后删除索引大于/小于(取决于排序顺序)的所有列表项today。请注意,这仅适用于您指定的日期格式(“yyyy-MM-dd”)(带有前导零!),并且仅在删除以前的日期是您想要执行的唯一操作时才有意义。

于 2013-04-29T19:05:34.067 回答
0

我建议您将日期转换为长,那么您的工作会容易得多。

Date d1 = new Date();//current time
d1.getTime()/1000;//will give you current time as a long value in second. 

查看纪元/unix 时间

于 2013-04-29T20:31:39.820 回答