如何将一个月添加到日期并获得同一天

我尝试根据工作日添加一个月的日期。 例如,日期是9月的星期一。 添加后我想要有10月的星期一。 我试着在下一个日期添加一个月

Mon Sep 17 17:30:00 MESZ 2012 

使用此代码:

 Calendar date = Calendar.getInstance(); date.setTimeInMillis(date_in_mil); date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 3); 

但是我得到了

 Mon Oct 08 17:30:00 MESZ 2012 

这是10月的第二个星期一,而不是第三个星期一。 有谁知道这是如何工作的?

编辑这是我在下面的答案中使用的解决方案:

 int prevDayOfWeek = date.get(Calendar.DAY_OF_WEEK); date.add(Calendar.MONTH, 1); date.set(Calendar.DAY_OF_WEEK, prevDayOfWeek); date.set(Calendar.DAY_OF_WEEK_IN_MONTH, week); 

星期是一个星期的星期数。 前例1表示第一个,第二个表示第二个,依此类推。 但是周也可以倒计时,例如-1表示一个月的最后一周。

如果你想获得月份的第3个星期一,那么使用set而不是add
date.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);

如果您想在当前日期添加一个月,请使用
date.add(Calendar.MONTH, 1);

编辑

 final Calendar date = Calendar.getInstance(); date.set(2012, Calendar.SEPTEMBER, 17); int prevDayOfWeekInMonth = date.get(Calendar.DAY_OF_WEEK_IN_MONTH); int prevDayOfWeek = date.get(Calendar.DAY_OF_WEEK); date.add(Calendar.MONTH, 1); date.set(Calendar.DAY_OF_WEEK, prevDayOfWeek); date.set(Calendar.DAY_OF_WEEK_IN_MONTH, prevDayOfWeekInMonth); 

使用Calendar类的roll()方法, Calendar类的add()方法不同,它只会修改提到的日期部分。

例如:

 public class Cal { public static void main(String[] args){ Calendar c = Calendar.getInstance(); c.roll(Calendar.MONTH, 1); System.out.println(c.getTime()); } } 

如果您想添加一个月,请执行以下操作:

 Calendar date = Calendar.getInstance(); date.setTimeInMillis(date_in_mil); date.add(Calendar.MONTH, 1); 

如果你想增加4周,

 Calendar date = Calendar.getInstance(); date.setTimeInMillis(date_in_mil); date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 4); 

要将本周保持为第三周:

 if(date.get(Calendar.WEEK_OF_MONTH)<3){ date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 1); } 

或者更好

 date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 3-date.get(Calendar.WEEK_OF_MONTH); 

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

信息不一致。 如果字段发生冲突,则日历将优先考虑最近设置的字段。 例如,在确定日期时,日历将查找以下字段组合之一。 将使用由最近设置的单个字段确定的最新组合。

  MONTH + DAY_OF_MONTH MONTH + WEEK_OF_MONTH + DAY_OF_WEEK MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK DAY_OF_YEAR DAY_OF_WEEK + WEEK_OF_YEAR 
 Calendar c= Calendar.getInstance(); System.out.println(c.get(Calendar.DATE));//if this is 2nd monday of September System.out.println(c.WEEK_OF_MONTH); c.add(c.WEEK_OF_MONTH, 4); System.out.println(c.get(Calendar.DATE));//prints the 2 monday of october 

字符串日期dd / mm / yyyy的解决方案:

 String mes = null; String yourfecha = null; if(yourfecha.substring(5,6).equals("/")){ mes = yourfecha.substring(3,5) }else{ mes = yourfecha.substring(4,6) } Integer newmes = Integer.valueOf(mes)+{How many months want to add}; String anyo = yourfecha.substring(6,10); String newFecha=null; if(newmes >12){ newmes=newmes-12; Integer newanyo=Integer.valueOf(anyo)+1; newFecha=yourfecha.substring(0,2)+"/0"+newmes + "/"+newanyo; }else{ newFecha=yourfecha.substring(0,4)+newmes+"/"+anyo; } return newFecha;