Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Calendar - Fatal编程技术网

Java 使用日历对象从当前日期减去天数

Java 使用日历对象从当前日期减去天数,java,date,calendar,Java,Date,Calendar,我试图使用java.util.Calendar对象从当前日期中减去天数。我的问题是要减去的天数可以是正的,也可以是负的。我的代码如下 public class Test { public static void main(String[] args) { int pastValidationDays=2; Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DA

我试图使用java.util.Calendar对象从当前日期中减去天数。我的问题是要减去的天数可以是正的,也可以是负的。我的代码如下

public class Test {
    public static void main(String[] args) {
        int pastValidationDays=2;
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH,  - pastValidationDays);
    }

}
根据上述代码,如果日期为2015年1月20日,则将给我2015年1月18日

现在假设pastValidationDays=-2(负值),那么它也应该从当前日期中减去。如果我说

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,  - pastValidationDays);
然后将天数相加,而不是减去。如果当前日期为2015年1月20日,则为2015年1月22日。但在这种情况下,我也需要日期为2015年1月18日

我正在做的一个方法如下

if (pastValidationDays < 0){
        calendar.add(Calendar.DAY_OF_MONTH,  pastValidationDays);
}else{
        calendar.add(Calendar.DAY_OF_MONTH,  -pastValidationDays);
} 

我只想使用calendar对象减去天数。我不想使用乔达时间和其他物体。如有其他方法,请提出建议。提前感谢

calendar.add(calendar.DAY\u OF_MONTH,-Math.abs(pastValidationDays))看起来不错。为了清晰起见,可以使用一个临时变量:
int numberOfDaysToSubtract=abs(pastValidationDays)。但是,完全摆脱这种逻辑,只向方法传递适当的(肯定的)参数,这难道没有意义吗?是的,只需使用abs。在if和abs之间,abs更简短>更容易理解>更好。但正如assylias所说,最好限制该方法的“合法”参数,使其语义更简单。我的意思是,类似于“此方法返回的日期比今天早,天数等于参数的绝对值”这比“此方法返回的日期[参数]比今天早几天”更复杂
calendar.add(Calendar.DAY_OF_MONTH,  - Math.abs(pastValidationDays));