6

我尝试根据工作日将日期添加一个月。例如,日期是 9 月的第 3 个星期一。添加后我想要 3. 十月的星期一。我试图将一个月添加到下一个日期

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

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

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

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

wereby week 是一个月中的周数。例如,1 表示第一个,2 表示第二个,依此类推。但是周也可以倒数,例如 -1 表示一个月的最后一周。

4

6 回答 6

12

如果您想获得每月的第三个星期一,请使用 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);
于 2012-10-15T16:27:20.380 回答
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);
于 2012-10-15T16:31:53.607 回答
1

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

例如:

public class Cal {

    public static void main(String[] args){

        Calendar c = Calendar.getInstance();

        c.roll(Calendar.MONTH, 1);

        System.out.println(c.getTime());
    }

}
于 2012-10-15T16:39:11.953 回答
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
于 2012-10-15T16:31:39.393 回答
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
于 2012-10-15T16:32:11.267 回答
-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;
于 2017-03-24T10:34:09.627 回答