字符串到日期转换和日期算术

时间:2013-04-29 18:56:54

标签: java date

我的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 个答案:

答案 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. 

请参阅epoch/unix time