用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 也是一样的结果

解决方案 »

  1.   


    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 
      

  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,问题基本清楚了,分给你,谢谢了