如何将一个月添加到日期并获得同一天
我尝试根据工作日添加一个月的日期。 例如,日期是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;