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