Java 如何将一个月添加到一个日期并获得相同的日期
我试着根据工作日给日期加上一个月。例如,日期是3。九月的星期一。添加后,我想要3。十月的星期一。 我试着在下一个日期加上一个月Java 如何将一个月添加到一个日期并获得相同的日期,java,Java,我试着根据工作日给日期加上一个月。例如,日期是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 ME
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表示月的最后一周。如果你想得到月的第三个星期一,那么使用
设置
而不是添加date.set(Calendar.DAY\u OF\u WEEK\u IN\u MONTH,3)代码>
如果要在当前日期后添加一个月,请使用
date.add(日历月,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 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);
}
信息不一致。如果字段冲突,日历将优先选择最近设置的字段。例如,在确定日期时,日历将查找以下字段组合之一。将使用由最近设置的单个字段确定的最新组合
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
类的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());
}
}
带有字符串日期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;
如果您在2012年9月17日星期一17:30:00 MESZ中添加3周,您将获得2012年10月8日星期一17:30:00 MESZ。你到底在期待什么?如果你使用JODA Time,而不是那些糟糕的内置库,你会更走运。我希望得到3分。这个月的星期一,但我错了。。。如何添加一个月以始终获得3。星期一?我想要一个月的第三个星期一,从一月到十二月。如果我总是添加4周,我想这不是每个月的第三个星期一。我将添加一个If
部分来处理这个问题。更新了答案。最后我添加了一个更好的选项。请查收。此外,如果这有帮助,请不要忘记接受答案。我知道这一点,但我的月份取决于日期,比如9月15日,加上10月15日。等等我需要它取决于第一,第二,第三。。。你想在哪一天增加一个月?例如,如果我有一个日期是一月的第三个星期日,我想在加上一个月后有二月的第三个星期日。它不起作用,它给我10月17日。在上面的例子中,但我需要10月15日。哪一天是星期三的第三个星期一Month@user1390816上面的代码只是演示其工作原理的示例。。。。我展示的例子u是将月份增加1,我想根据1,2,3。,增加一个月。。。因此,我尝试遵循date.add(Calendar.MONTH,1)代码>和之后的日期.set(日历.DAY\u/周\u/月,3)但是我得到了10月17日。而不是10月15日。您的最后一个else
没有if
是,但这是不够的,因为最后一个if
和最后一个else
是if
范围之外的其他命令。
public class Cal {
public static void main(String[] args){
Calendar c = Calendar.getInstance();
c.roll(Calendar.MONTH, 1);
System.out.println(c.getTime());
}
}
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;