Try:
   long dt = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(str1).getTime();
   Calendar cal = Calendar.getInstance();
   cal.setTime(dt);
  System.out.println("原始时间 =="+cal.getTime());
   cal.add(Calendar.HOUR, add_hours)
  System.out.println("增加x小时后="+cal.getTime());  

解决方案 »

  1.   

    你的算法不可行吧,
    Error:
       setTime(java.util.Date) in java.util.Calendar cannot be applied to (long)
      

  2.   

        不是的,是int add_hours*60*60=3600000000溢出,因为int的最大正值为2的31次方减-1 即2147483647。
    可以把add_hours的类型改为long
      

  3.   

    jinfei(feifei) 你看错了,这里的add_hours根本不可能发生溢出,我赋给它的值才1000
      

  4.   

    我的意思是new Timestamp(dt+add_hours*60*60*1000)这一步中,add_hours*60*60*1000返回的类型仍然是int,但是它溢出了,你可以运行一下:
     int i2=1000;
     System.out.println("the i2 is"+add_hours*60*60*1000);
    是个负值
      

  5.   

    明白了,看来我是没有搞清楚Java的运算时类型的转换问题。
    add_hours*60*60*1000得出的结果类型是保持与add_hours的类型一致的吧,哈哈,thanks!......
       long add_hours=8760;  //刚好一年的小时数24*365
       System.out.println("Value1 = "+add_hours*60*60*1000);
       System.out.println("Value2 = "+8760*60*60*1000);
    .......
    输出的结果:
    Value1 = 31536000000
    Value2 = 1471228928