我有一个现有的约会对象,我想用一天的时间增加,同时保持所有其他领域一样。我遇到的每个示例都会花费小时/分钟/秒,或者您必须创建一个新的日期对象并将字段传输过来。有没有办法让你的日间场地增加1?
感谢
编辑:对不起,我不是故意的一个递增一天的价值,我的意思提前一天向前1
我有一个现有的约会对象,我想用一天的时间增加,同时保持所有其他领域一样。我遇到的每个示例都会花费小时/分钟/秒,或者您必须创建一个新的日期对象并将字段传输过来。有没有办法让你的日间场地增加1?
感谢
编辑:对不起,我不是故意的一个递增一天的价值,我的意思提前一天向前1
Calendar c = Calendar.getInstance();
c.setTime(yourdate);
c.add(Calendar.DATE, 1);
Date newDate = c.getTime();
真的很好的解决方案。但它是否也适用于1月份的第31个月?那么发生了什么? – 2012-05-10 07:29:03
真的吗?它需要4行代码来增加日期?这太愚蠢了。 – 2012-05-24 18:05:08
的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()
方法时区也是如此,如果你不希望使用本地时区。)
/**
* 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());
}
如果你是做多该日期的操作,更好地利用直接日历对象,而不是从一次又一次转换到日期。
org.apache.commons.lang.time.DateUtils.addDays(date, 1);
号的唯一方法是1天添加日期。原因是:假设你将5月31日的日期字段增加1,这是否使5月32日?而如果您添加1天,则Java会处理该问题。 – Soumya 2011-02-26 20:57:23
'date.setTime(date.getTime()+ 24 * 60 * 60 * 1000)'是一个简单的肮脏解决方案。没有指定时区的 – maaartinus 2011-02-26 22:32:20
没有当前日期。 – bestsss 2011-02-26 23:19:16