第一个比较简单,用Date类的getTime()方法把时间转换成long型,相减除以一天的毫秒数就可以了

解决方案 »

  1.   

    回复人: zjpangxie(本命年,别惹我) (我也是本命年啊  哈哈````
      

  2.   

    第二个利用Calendar类有很多方法(一天天算也可以),我想想有没有简单的
      

  3.   

    public class forother {
        public static void main(String[] args){
            
            SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
           
            String ooo="2005-02-18 15:39:15";
            String ppp="2005-02-01 15:25:15";      
            try{
            Date tt=s.parse(ooo);
            Date yy=s.parse(ppp);
            long aa;
            if(tt.getTime()>yy.getTime())
                aa=tt.getTime()-yy.getTime();
            else
                aa=yy.getTime()-tt.getTime();
            long date=aa/1000/60/60/24;
            System.out.println("***");
            System.out.println("hahahha"+date);
            System.out.println("*******");
            }catch(Exception e){
                
            }
           
        }
    }
    不除去星期天
      

  4.   

    恩 明白 楼上的意思 thx  现在最主要的问题 是要除去星期六和日哦 ````
      

  5.   

    我说的一天天算是指从开始日期开始利用Calendar的add()方法一天天加,每次get(Calendar.DAY_OF_WEEK),不是SATURDAY,SUNDAY的话天数就加上1,直到add到结束日期
    -_-这个是死方法,很烂简单一点,可以先计算开始日期所在周的最后一天,和结束日期所在周的最后一天之间的天数,然后当中的周六周日数就好算了(天数/7 ×2),剩下就是调整一下实际开始日期和实际结束日期对天数的影响就ok了
      

  6.   

    改成:
    date=(aa/1000/60/60/24/7)*5+((aa/1000/60/60/24)%7)
    应该差不多是这样吧
      

  7.   

    count day by day, this is not a good methodclass DateTest {
    public static void main(String[] args) {
    String s1="2005-02-01 15:25:15"; 
    String s2="2005-02-18 15:39:15";
            
            DateTest dt = new DateTest();
            
            int days[] = dt.countDays(s1, s2);
            for (int i=0; i<days.length; i++) {
             System.out.println("days[" + i + "] = " + days[i]);
            }  
    }

    public int[] countDays(Calendar c1, Calendar c2) {
    int[] days = new int[2];
    days[0] = 0;
    days[1] = 0;
    while (c2.after(c1)) {
    days[0]++;
    if (c1.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && 
    c1.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
    days[1]++;
    }
    c1.add(Calendar.DATE, 1);
    }

    return days;
    }

    public int[] countDays(Date d1, Date d2) {
    Calendar c1 = new GregorianCalendar();
    Calendar c2 = new GregorianCalendar();
    c1.setTime(d1);
    c2.setTime(d2);
    return countDays(c1, c2);
    }

    public int[] countDays(String s1, String s2) {
    try {
    SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
    Date d1 = s.parse(s1);
    Date d2 = s.parse(s2);
    return countDays(d1, d2);
    } catch (Exception e) {
    return null;
    }
    }
    }
      

  8.   

    简单。这里有一个判断日期的一段代码,你插上,每一天都判断一下是不是礼拜六或礼拜天(礼拜天返回值是0)public int getWeek(){
      int Days[] = {31,59,90,120,151,181,212,243,273,304,334,365};
      long n = (_year-1L)*365 + _day + (_year-1L)/4 - (_year-1L)/100 + (_year-1L)/400;
      if(_month>1)
        n+=Days[_month-2];
      if((_month>2)&&(_year%4==0&&_year%100!=0||_year%400==0))
        n++;
    return n%7;
    }如果判断是就跳过,不是就自动加1。
      

  9.   

    还有一个比较简单的判断星期的方法:public int dayofweek( int year, int month, int day )
    {
    int a = (14-month) / 12;
    int y = year - a;
    int m = month + 12*a - 2;
    return (day + y + y/4 - y/100 + y/400 + (31*m)/12) % 7;
    }
      

  10.   

    回复人: qybao(阿宝) 
    的死方法很好理解  
    呵呵  执行效率也还好 !!!
      

  11.   

    mengxianwei007(斩不断&lt;==&gt;理还乱)  讲下你2个方法的思路啊
    看不明白:(
      

  12.   

    int n1 =日期之间的差额;
    int n2 =-n1/7*2;
    int n3 = n1%7;
    int n4 =开始日期的星期数;
    if (n4+n3)>6
       n3 = -2;
    else if (n4+n3)<6
       n3 = 0;
    else
       n3 = -1;int 去除后的结果=n1+n2+n3;--------------------------------------------------
    注:具体的边界问题自己注意一下。
      

  13.   

    dateNum :用上面的方法取得2个时间段之间的天数dateNum/7 : 这些天数之间有多少个礼拜dateNum/7 * 2 : 这些天数之间有多少个礼拜5,礼拜6dateNum%7 : 不能组成一个礼拜的天数(问题是如何求这几天中,礼拜5和礼拜6的天数)
                 这几天可以在时间开头,也可以在时间段尾部
                 可以将这几天分离开来,用办法判断是否是礼拜5,礼拜6dateNum2  : 上面dateNum%7 中礼拜5,礼拜6的天数所以天数是dateNum - dateNum/7 * 2 -  dateNum2 
                 
      

  14.   

    楼上的dateNum2  中的礼拜5,礼拜6的天数不是很好算啊 你是算开头 还是算结尾?
      

  15.   

    public static int getDateNum(Date from, Date to)
      {
        long time;
        if (from.getTime() > to.getTime())
        {
          time = from.getTime() - to.getTime();
        }
        else
        {
          time = to.getTime() - from.getTime();
        }
        
        // 2个时间段之间的天数
        int dateNum = (int) (time / 1000 / 60 / 60 / 24);    int weekNum = dateNum / 7;    int resNum = dateNum % 7;    Calendar calendar = Calendar.getInstance();    calendar.setTime(from);    int num = 0;
        for (int i = 0; i < resNum; i++)
        {
          if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
          {
            num++;
          }
          if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
          {
            num++;
          }
          calendar.add(Calendar.DATE, 1);
        }    dateNum = dateNum - dateNum / 7 * 2 - num;    return dateNum;
      }
      

  16.   

    public static void main(String[] args)
      {
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");    String ooo = "2005-02-18 15:39:15";
        String ppp = "2005-02-01 15:25:15";
        try
        {
          Date from = s.parse(ooo);
          Date to = s.parse(ppp);
          System.out.println(getDateNum(from, to));
        }
        catch (Exception e)
        {
          System.out.println(e);
        }  }
      

  17.   

    如果只是简单算日期差,用d.getTime()求差除3600000*24是最快捷的,但是对于某些Locale,16世纪之前的日期计算,转换成Calendar时要注意一些问题。
    在大多数国家里,Julian Calendar被Gregorian Calendar(公历)替换发生在1582年10月15日,因为Julian Calendar和公历的leap year差别(公历多一个400年一闰),这样为了平稳的从Julian Calendar过渡到公历,从1582年10月4日直接跟着就是1582年10月15日, 中间的日期就没了!
    如果你用的Locale碰巧在某些对公历接受比较晚的国家,比如在比利时,1584年才使用公历,这段消失的日期又会不一样。当然,如果你的程序不会操作这么变态的日期,你就不用关心太多Locale的问题,GregorianCalendar这个类这么复杂是有道理的