Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一个月添加到一个日期并获得相同的日期_Java - Fatal编程技术网

Java 如何将一个月添加到一个日期并获得相同的日期

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

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

如果你想得到月的第三个星期一,那么使用
设置
而不是添加
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)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;