1
import java.text.DateFormat;
import java.util.Date;

public class DatePlus {

    public static void main(String[] args) {
        Date now = new Date();
        //Date now1 = new Date();
        Date now2 = new Date();
        DateFormat currentDate = DateFormat.getDateInstance();

        int count1=10;
        int count2=15;

        Date addedDate1 = addDays(now2, count1);
        Date addedDate2 = addDays(addedDate1, count2);
        System.out.println(currentDate.format(addedDate1));
        System.out.println(currentDate.format(addedDate2));
    }

    public static Date addDays(Date d, int days) {
        d.setTime(d.getTime() + days * 1000 * 60 * 60 * 24);
        return d;
    }
}

尽管预期输出不同,但日期addedDate1和输出语句都打印相同的日期。addedDate2

4

4 回答 4

7

问题是您没有返回新Date实例,而是更改了提供的实例。您总是修改和打印同一个实例。

将您的功能更改为

public static Date addDays(Date d, int days) {
    return new Date(d.getTime() + days * 1000 * 60 * 60 * 24);
}
于 2013-07-22T11:22:21.593 回答
3

您可以使用Calender类,而不是编写自己的方法:

public static void main(String[] args) 
    {
        Date now = new Date();
//        Date now2 = new Date();
        DateFormat currentDate = DateFormat.getDateInstance();

        int count1=10;
        int count2=15;

        Calendar c=Calendar.getInstance();
        c.setTime(now); 
        c.add(Calendar.DATE, count1); 
        Date addedDate1 = c.getTime();

        c.setTime(addedDate1);
        c.add(Calendar.DATE, count2); 
        Date addedDate2 = c.getTime();

        System.out.println(currentDate.format(addedDate1));
        System.out.println(currentDate.format(addedDate2));
    }
于 2013-07-22T11:48:02.473 回答
1

正如在几个答案/评论中已经提到的,手动进行这些计算是有风险的并且容易出错。
这是您需要的基本示例,它使用Joda Time库,它是 JDK Date、Calendar 的一个非常稳定且设计良好的替代品。ETC...

public static void main(String[] args) {
    DateTime now = new DateTime();
    DateTimeFormatter fmt = ISODateTimeFormat.dateTime();

    int count1=10;
    int count2=15;

    DateTime addedDate1 = now.plusDays(count1);
    DateTime addedDate2 = addedDate1.plusDays(count2);

    System.out.println(fmt.print(addedDate1));
    System.out.println(fmt.print(addedDate2));
}

另外,请记住,除了更好的设计和清晰的文档之外,Joda Time 还主要是线程安全的,因为它总是返回不可变对象
最后,它被开发为可与 JDK 日期和日历互操作。

于 2013-07-22T12:43:48.913 回答
0

正如dystroy所提到的,您没有创建新实例,这就是问题所在。

顺便说一句,您可以使用像Apache Commons Language这样的外部库来执行这种逻辑,这已经过很好的测试,您可以避免此类问题。Commons Language 已经有了一个addDays方法

更好的是,你可以使用也有这种方法的Joda-Time 。

于 2013-07-22T11:28:29.833 回答