为什么减法超过30天导致错误答案

use*_*919 2 java datetime

如果我尝试减去1到29天,则返回日期是正确的,但如果我尝试减去超过30天,则返回日期是错误的.谁能解释我哪里出错?

public class MapTesting {
    public static void main(String[] args) {
        Date dNow = new Date( );
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy-dd-MM");

        try {
            Date date = ft.parse("2011-01-10");
            Date su=new Date(date.getTime()-30*24*3600*1000);
            System.out.println(su);
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

ant*_*u17 8

int常量溢出:30*24*3600*1000.

尝试将整数投入: Date su=new Date(date.getTime() - 30 * 24 * 3600 * 1000L);

  • 我发现如果使用大写L而不是小写,则更容易区分.很容易将"30l"误认为"301",而不是"30L". (2认同)