用JAVA写的程序,计算两个日期之间的天数
Calendar GlDateTime = Calendar.getInstance();
GlDateTime.set(2000, 2, 1); // 2000-3-1
Calendar NlDateTime = Calendar.getInstance();
NlDateTime.set(2000, 1, 28); // 2000-2-28
long rqc = GlDateTime.getTimeInMillis() - NlDateTime.getTimeInMillis();
int ts = (int)(rqc/1000/60/60/24); // 计算相差的天数打印出来的ts是1天,不是应该2天的吗?同样这段程序,把3月1日改成2月29日,算出来的时间差是0天?
然后2月28日到2月27日又相差是1天,感觉就是JAVA没把2000年当闰年,2月29那天没算在内,怎么会这样Calendar 换成 Data 也是一样的结果
Calendar GlDateTime = Calendar.getInstance();
GlDateTime.set(2000, 2, 1); // 2000-3-1
Calendar NlDateTime = Calendar.getInstance();
NlDateTime.set(2000, 1, 28); // 2000-2-28
long rqc = GlDateTime.getTimeInMillis() - NlDateTime.getTimeInMillis();
int ts = (int)(rqc/1000/60/60/24); // 计算相差的天数打印出来的ts是1天,不是应该2天的吗?同样这段程序,把3月1日改成2月29日,算出来的时间差是0天?
然后2月28日到2月27日又相差是1天,感觉就是JAVA没把2000年当闰年,2月29那天没算在内,怎么会这样Calendar 换成 Data 也是一样的结果
package CSDN;import java.util.Scanner;
import java.util.*;/**
* 计算两个日期相差的天数
* @author xqh
*
*/
public class DateTest {
public static void main(String[] args) {
//设置两个日期
Calendar c1 = Calendar.getInstance();
c1.set(2000, 2, 1);// 设置日历
Calendar c2 = Calendar.getInstance();
c2.set(2000, 1, 28); //日期:1949-10-1
//转化为相对时间
long t1 = c1.getTimeInMillis();
long t2 = c2.getTimeInMillis();
//计算相差天数
long days = (t1 - t2) / (60*60*24*1000);
System.out.println(days);
}}结果为 2
long t1=GlDateTime.getTimeInMillis();
long t2=NlDateTime.getTimeInMillis();
然后计算
long rqc = (t1-t2)/(1000*60*60*24);
得出来的rqc值就是1换一种方式,先分别计算两个日期的相对天数,再减:
long t1=GlDateTime.getTimeInMillis()/(1000*60*60*24);
long t2=NlDateTime.getTimeInMillis()/(1000*60*60*24);
然后计算
long rqc = t1-t2;
这样得出的结果就是2天了分析了一下,应该是浮点数引起的,我把两个getTimeInMillis()的值打了出来
GlDateTime.getTimeInMillis()的值是951928516456
NlDateTime.getTimeInMillis()的值是951755716457
手动算了下:
(951928516456-951755716457)/(1000*60*60*24) = 1.9999999884259259259259259259259
没超过2,转成整形的时候尾数被截掉了,然后就出现我说那个问题OK,问题基本清楚了,分给你,谢谢了