我已经阅读过并且基本上我已经发现Calendar对象能够通过使用类似的东西将日期添加1个月:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
虽然每当日期在30或31时我都不喜欢它的行为。如果我将1个月添加到2012年1月31日,则输出将变为02/29/2012。当我再加1个月时,它就变成了03/29/2012。
无论如何我可以强制02/29/2012自动成为03/01/2012吗?
基本上这就是我想要发生的事情:
默认日期:01/31/2012
添加1个月:03/01/2012
再加1个月:03/31/2012
答案 0 :(得分:3)
您要求的是一些隐含的知识,如果开始日期是该月的最后一天,并且您添加1个月,则结果应该是下个月的最后一天。即财产“最后一天”应该是粘性的。
这不是Java Calendar
中直接提供的,但一种可能的解决方案是使用Calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
重置月份后的日期。
Calendar cal = ...;
cal.add(Calendar.MONTH,1);
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DAY_OF_MONTH));
您甚至可以继承GregorianCalendar
并添加方法
public Calendar endOfNextMonth() { ... }
封装操作。
答案 1 :(得分:3)
加上30天你可以这样做:
public static java.sql.Date sumarFechasDias(java.sql.Date fch, int days) {
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(fch.getTime());
cal.add(Calendar.DATE, days);
return new java.sql.Date(cal.getTimeInMillis());
}
如果天数= 30,则会在30天后返回您的日期。
答案 2 :(得分:0)
如果下个月的日期小于之前一个月的日期,您似乎希望日历汇总到下个月的开头。以下是我们如何做到这一点:
Calendar cal = Calendar.getInstance();
int oldDay = cal.get(DAY_OF_MONTH);
cal.add(Calendar.MONTH, 1);
// If the old DAY_OF_MONTH was larger than our new one, then
// roll over to the beginning of the next month.
if(oldDay > cal.get(DAY_OF_MONTH){
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY, 1);
}