java-----------系统当前时间减去1年得到去年的时间

方法一

 		Calendar c = Calendar.getInstance();
        c.setTime(simpleDateFormat.parse("2020-2-29 11:12:14"));
        //表示你需要减少的年数
        int reduceYear = -1;
        c.add(Calendar.YEAR,reduceYear);
        Date y = c.getTime();
        String year = simpleDateFormat.format(y);
        System.out.println(year);

上面输出的结果为 2019-02-28 11:12:14

说明闰年他也会进行对应的操作,没问题了

方法二

	  	Long t =24L*60*60*1000*365;
     	Long time = System.currentTimeMillis() - t;
     	System.out.println(new Timestamp(time));

方法二会有一定的局限性,比如闰年会导致一年有366天,所以不建议使用第二种


遇到的坑

	Long t = 365*24*60*60*1000;
	long time = System.currentTimeMills() -t;
	System.out.println(new Timestamp(time));

上面时间的输出会得到不你想要的结果。因为一开始t的变量值就发生了错误

t 的值为 1471228928

出现上诉的原因是因为超过了int的长度,导致溢出,可能你会说我明明使用了Long类型来接受啊,但是你知道先进行int的相乘,得到的结果并隐式的将其转换成long类型,也就是说在相乘的时候就会发生异常,那么解决的思路就有了,将其先转换成long类型(比如方法二),强制表达式中后续计算都用long运算来完成,这样就可以处理掉这个问题。

在后续的查阅文档中

Integer.MAX_VALUE= 2147483647 (即231-1)

Long.MIN_VALUE=-9223372036854775808 (即263-1)

你可能感兴趣的:(Java)