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

时间:2012-10-15 16:24:56

标签: java

我尝试根据工作日添加一个月的日期。例如,日期是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表示月的最后一周。

6 个答案:

答案 0 :(得分:12)

如果你想获得月份的第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);

答案 1 :(得分:1)

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

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);

答案 2 :(得分:1)

使用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());
    }

}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

具有字符串日期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;