java如何计算两个日期相隔多少天?如:给定年份计算:2005-5-10到2011-1-1 ?   给定月分计算 :1-1 到12 -1   给定日子计算: 1 到 31如何实现? 

解决方案 »

  1.   


    public int betweenDays(Calendar beginDate, Calendar endDate) {
            if (beginDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                return endDate.get(Calendar.DAY_OF_YEAR)
                        - beginDate.get(Calendar.DAY_OF_YEAR);
            } else {
                if (beginDate.getTimeInMillis() < endDate.getTimeInMillis()) {
                    int days = beginDate.getActualMaximum(Calendar.DAY_OF_YEAR)
                            - beginDate.get(Calendar.DAY_OF_YEAR)
                            + endDate.get(Calendar.DAY_OF_YEAR);
                    for (int i = beginDate.get(Calendar.YEAR) + 1; i < endDate
                            .get(Calendar.YEAR); i++) {
                        Calendar c = Calendar.getInstance();
                        c.set(Calendar.YEAR, i);
                        days += c.getActualMaximum(Calendar.DAY_OF_YEAR);
                    }
                    return days;
                } else {
                    int days = endDate.getActualMaximum(Calendar.DAY_OF_YEAR)
                            - endDate.get(Calendar.DAY_OF_YEAR)
                            + beginDate.get(Calendar.DAY_OF_YEAR);
                    for (int i = endDate.get(Calendar.YEAR) + 1; i < beginDate
                            .get(Calendar.YEAR); i++) {
                        Calendar c = Calendar.getInstance();
                        c.set(Calendar.YEAR, i);
                        days += c.getActualMaximum(Calendar.DAY_OF_YEAR);
                    }
                    return days;
                }
            }
        }
      

  2.   


     public static int betweenDays(Calendar beginDate, Calendar endDate) {
    //可以用正負代表前後
            //return (int)((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));//不然就取絕對值。
            return (int) Math.abs((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));
        }
      

  3.   

    直接getTimeInMillis()接可以得到毫秒在算
      

  4.   

    使用 jsr-310-ri-0.6.3.jar + jsr-310-ri-TZDB-all-0.6.3.jarDateTimeFormatter formatter = DateTimeFormatters.pattern("yyyy-M-d");int days = Period.daysBetween(LocalDate.parse("2005-5-10",formatter),LocalDate.parse("2011-1-1",formatter)).getDays(); // 2062formatter = DateTimeFormatters.pattern("M-d");
    Year year = Year.now();
    days = Period.daysBetween(year.atMonthDay(MonthDay.parse("1-1",formatter)),year.atMonthDay(MonthDay.parse("12-1",formatter))).getDays();
      

  5.   

    可以尝试。  用JDK里面的 时间提供的类。
      

  6.   

    Calendar c = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c.set(2005, 5, 10);
    c2.set(2011, 1, 1);
    System.out.println((c2.getTimeInMillis()-c.getTimeInMillis())/(1000*3600*24));
      

  7.   


    ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream("date6.txt"));
    obj.writeObject(date);
    obj.close();
    写入后中文变成了乱码@!
      

  8.   

    直接上代码public long differDays(String date)
    {
    long differDays = 0;
    long DAY = 24L * 60L * 60L * 1000L;    
    SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" );  

    Date todayDate = new java.sql.Date(new Date().getTime());
    Date paraDate = null;
    try {
    paraDate = df.parse( date );
    } catch (ParseException e) 
    {
    e.printStackTrace();
    }    
    differDays = ( todayDate.getTime() - paraDate.getTime() ) / DAY ;
    return differDays;
    }
      

  9.   

    Calendar c = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c.set(2011, 1, 10);
    c2.set(2011, 1, 12);
    System.out.println((c2.getTimeInMillis()-c.getTimeInMillis())/(1000*3600*24));
    测试过,success!!
      

  10.   

    import java.util.concurrent.TimeUnit;public long daysBetween(Calendar from,Calendar to){
        return TimeUnit.MILLISECONDS.toDays(to.getTimeInMillis() - from.getTimeInMillis());
    }
      

  11.   


    public class CaluateDate { /**
     *
     5、编写一个Java应用程序,当用户在输入对话框中输入两个日期后
    (日期格式为YYYYMMDD,如1999年1月12日应输入为19990112),程序将判断两个日期的先后顺序,
    以及两个日期之间的间隔天数(例如1999年1月1日和1999年1月2日之间的间隔是1天)。(本题20分)
     */
    public static void main(String[] args) {

    Calendar c1=getCalendar("19521231");
    Calendar c2=getCalendar("19491001");
    System.out.println(getDay(c1, c2));
    }

    public static Calendar getCalendar(String date){
    int year=Integer.parseInt(date.substring(0,4));
    int month=Integer.parseInt(date.substring(4, 6));
    int day=Integer.parseInt(date.substring(6, 8));

    GregorianCalendar c=new GregorianCalendar(year, month, day);
    return c;} public static int getDay(Calendar c1,Calendar c2){
    long m;
    int day;
    if(c1.compareTo(c2)>0){
    m=c1.getTimeInMillis()-c2.getTimeInMillis();
    }else if(c1.compareTo(c2)<0){
    m=c2.getTimeInMillis()-c1.getTimeInMillis();
    }else{
    m=0;
    }
    day=(int)(m/(1000*60*60*24));
    return day;

    }
    }
      

  12.   

    package programming;import java.util.Calendar;
    import java.util.GregorianCalendar;
    import javax.swing.JOptionPane;public class CalendarTest
    {
    public static void main(String[] args)
    {
    String str1=JOptionPane.showInputDialog(null, 
    "请输入第一个日期(日期格式为YYYYMMDD,如1999年1月12日应输入为19990112):");
    String str2=JOptionPane.showInputDialog(null,
    "请输入第二个日期(日期格式为YYYYMMDD,如1999年1月12日应输入为19990112):");

    Calendar calendar1=new GregorianCalendar();
    Calendar calendar2=new GregorianCalendar();
    calendar1.set(Integer.parseInt(str1.substring(0, 4)),
    Integer.parseInt(str1.substring(4, 6)),Integer.parseInt(str1.substring(6, 8)));
    calendar2.set(Integer.parseInt(str2.substring(0, 4)),
    Integer.parseInt(str2.substring(4, 6)),Integer.parseInt(str2.substring(6, 8)));

    long mills1=calendar1.getTimeInMillis();
    long mills2=calendar2.getTimeInMillis();
    long interval=0;
    if(mills1<mills2){
        System.out.println("第一个日期先于第二个日期");
        interval=(mills2-mills1)/(24*3600*1000);
    }
    else if(mills1>mills2){
    System.out.println("第二个日期先于第一个日期");
    interval=(mills1-mills2)/(24*3600*1000);
    }
    else
    System.out.println("两个日期相等");

    System.out.println("两个日期的间隔是:"+interval+" 天");

    }
    }