日期:2014-05-20  浏览次数:20758 次

时间相减 问题?不知道怎么回事?请大侠们帮助!
当前时间是 2011-10-06 16:24:15转毫秒 - (42300 * 60 * 1000) 应该是 九月才对啊 怎么是十月25号了

public static void main(String[] args) {
getEndTimePoint("2011-10-05 08:21:28",42300);//42300是一个月的分钟 

}
  private static long getEndTimePoint(String dateStr, int cyc)
  {
  SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
  "yyyy-MM-dd HH:mm:ss");

  Date date = null;
  try
  {
  date = simpleDateFormat.parse(dateStr);
  }
  catch (ParseException e)
  {
  e.printStackTrace();
  }

  long dvalue = (date.getTime()) - (cyc * 60 * 1000);
  System.out.println(simpleDateFormat.format(new Date((date.getTime()) - (cyc * 60 * 1000))));

  return dvalue;

  }

这里打印出来怎么是 2011-10-25 16:24:15

我如果减去一个星期的是对的 一个月就错误了 这个怎么用呢?

我看时间相减基本是用这种方法的啊?






------解决方案--------------------
private static long getEndTimePoint(String dateStr, int cyc)

这个方法,你定义的cyc 是int 类型
在 long dvalue = (date.getTime()) - (cyc * 60 * 1000); 可能出现错误,
具体原理我也不太清楚,望达人解答

把cyc改成long类型,程序就可以了
------解决方案--------------------
这个里面cyc * 60 * 1000 都是int类型,所以相乘的结果也是int类型,我试了一下,24天可以的,到25天就溢出了,所以改成下面就可以了
long dvalue = (date.getTime()) - (cyc * 60 * 1000l);
System.out.println(simpleDateFormat.format(new Date((date.getTime()) - (cyc * 60 * 1000l))));


------解决方案--------------------
这种转换使用 TimeUnit。
 TimeUnit.DAYS.toMillis(30L); // 30天对应的毫秒数。