我有一个现有的日期对象,我想增加一天,同时保持每个其他字段相同。我遇到的每个例子都是小时/分钟/秒,或者您必须创建一个新的日期对象并将字段转移过来。有没有办法可以将日期字段提前1?
由于
编辑:对不起我并不是说每天增加一天的价值,我的意思是提前一天提前1
答案 0 :(得分:25)
Calendar c = Calendar.getInstance();
c.setTime(yourdate);
c.add(Calendar.DATE, 1);
Date newDate = c.getTime();
答案 1 :(得分:6)
Date
对象本身(假设您的意思是java.util.Date
)没有 Day字段,只有“Unix Epoch以来的毫秒数”值。 (toString()
方法根据当前语言环境打印出来。)
根据您的目的,原则上有两种方式:
如果您只想“在指定日期后24小时”,您只需在时间值上添加1000 * 60 * 60 * 24毫秒,然后设置此值。如果之间有夏令时间转换,那么可能是你的旧日期是11:07而新的是在10:07或12:07(取决于班次的方向),但它仍然是24小时差异。
private final static long MILLISECONDS_PER_DAY = 1000L * 60 * 60 * 24;
/**
* shift the given Date by exactly 24 hours.
*/
public static void shiftDate(Date d) {
long time = d.getTime();
time += MILLISECONDS_PER_DAY;
d.setTime(time);
}
如果您希望“在下一个日历日同一时间”,最好使用日历,例如MeBigFatGuy。 (如果您不希望使用本地时区,也许您希望将此getInstance()
方法用于TimeZone。)
/**
* Shifts the given Date to the same time at the next day.
* This uses the current time zone.
*/
public static void shiftDate(Date d) {
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, 1);
d.setTime(c.getTimeInMillis());
}
如果您正在进行多次此类日期操作,最好直接使用Calendar对象,而不是一次又一次地从和转换为Date。
答案 2 :(得分:5)
org.apache.commons.lang.time.DateUtils.addDays(date, 1);