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
输出语句打印的日期相同,但预期输出不同。
答案 0 :(得分:7)
问题是您没有返回新的Date
实例,而是更改提供的实例。您始终修改并打印相同的实例。
将您的功能更改为
public static Date addDays(Date d, int days) {
return new Date(d.getTime() + days * 1000 * 60 * 60 * 24);
}
答案 1 :(得分:3)
您可以使用Calender class:
,而不是编写自己的方法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));
}
答案 2 :(得分:1)
正如在几个答案/评论中已经提到的那样,手动进行这些计算是有风险且容易出错的 以下是您需要的基本示例,使用Joda Time库,这是JDK Date,Calendar的一个非常稳定且设计良好的替代方案。等...
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日期和日历一起发展为可互操作。
答案 3 :(得分:0)
正如 dystroy 所提到的,你没有创建一个新实例,这就是问题所在。
顺便说一句,您可以使用像Apache Commons Language之类的外部库来执行此类逻辑,这已经过很好的测试,您可以避免此类问题。 Commons Language已经有addDays
method。
更好的是,你可以使用Joda-Time,它也有这种方法。