JAVA时间相减

来源:百度知道 编辑:UC知道 时间:2024/07/02 02:11:29
下面这段代码是输出从现在到23天前的时间
Calendar cl=Calendar.getInstance();

Long clTemp=cl.getTimeInMillis()-23*24*60*60*1000;
//减去23天
cl.setTimeInMillis(clTemp);
/*date即为现在时间加上七天后的时间*/
Date date=cl.getTime();
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("test:"+myFmt.format(date.getTime()));

输出结果:2008-09-28 09:47:48

解释一下:23*24*60*60*1000; 这个是减去23天,当减去1-23天的时候,程序都会正常显示,但是从减25之后,显示结果就有了问题,比如说:
25*24*60*60*1000,输出结果却是:
2008-11-15 02:49:40

用下面这种方法吧:
Calendar date = Calendar.getInstance();//today
//int k = 5;//add 5 days
int k = -5;//sub 5 days
date.add( Calendar.DATE, k );
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDate = new SimpleDateFormat( format );
String newDate = simpleDate.format( date.getTime() );
System.out.println("newDate is "+newDate);

其实这是一个很简单的问题

25*24*60*60*1000
这个相乘的值溢出了,已经超出int最大值的范围了
你把这个东西打印出来就知道了

解决办法
(25*24*60*60*1000)L
后面加个L,转换成Long型

用这个把
GregorianCalendar gc =new GregorianCalendar();
可以对年月日时间加减