读书人

java怎么计算给出的两个日期相隔多少天

发布时间: 2012-04-08 14:38:30 作者: rapoo

java如何计算给出的两个日期相隔多少天?
java如何计算两个日期相隔多少天?

如:给定年份计算:2005-5-10到2011-1-1 ?

给定月分计算 :1-1 到12 -1

给定日子计算: 1 到 31

如何实现?

[解决办法]

Java code
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/29 ,或者 是否支持 12-1 到 1-1

[解决办法]
Java code
package com.cme.LanDian;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;/* * 输入某年某月某日,判断这一天是这一年的第几天? */public class GetDateDays {    public static void main(String[] args) {        System.out.println("请输入一个日期:");        String dateString = nnew Scanner(System.in).nextLine();        String yearBegin = dateString.substring(0, 4) + "-01-01";        // 定义日期格式:        SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");        try {            Date date = sdf.parse(dateString);// 通过日期格式的parse()方法将字符串转换成日期            Date dateBegin = sdf.parse(yearBegin);            long l = date.getTime() - dateBegin.getTime();            l = l / 1000 / 60 / 60 / 24;             System.out.println(l);        } catch (ParseException e) {            e.printStackTrace();        }    }}
[解决办法]
date4j
[解决办法]
把日期转化成毫秒,相减得到毫秒数,然后再转化为天
[解决办法]
探讨

引用:
把日期转化成毫秒,相减得到毫秒数,然后再转化为天


有点抽象的感觉

你可以写个例子吗?

[解决办法]
探讨
Java code

public static int betweenDays(Calendar beginDate, Calendar endDate) {
//可以用正代表前後
//return (int)((beginDate.getTimeInMillis() - endDate.getTimeInMillis())/(1000*60*60*24));

……

[解决办法]
使用 Joda-time 库。
------解决方案--------------------


使用 jsr-310-ri-0.6.3.jar + jsr-310-ri-TZDB-all-0.6.3.jar

Java code
DateTimeFormatter 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();
[解决办法]
可以尝试。。。。 用JDK里面的 时间提供的类。
[解决办法]
斗胆提出,如果不是日期而是时间呢,转化为毫秒的时间算法还行吗!!
[解决办法]
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));
[解决办法]
直接上代码
Java code
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;}
[解决办法]
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!!
[解决办法]
这个以前也考滤过 在图书馆的借还时间 就用毫秒算
[解决办法]
就是三楼的那个比较简单 上次我要用也是用的这种方法
[解决办法]
Java code
import java.util.concurrent.TimeUnit;public long daysBetween(Calendar from,Calendar to){    return TimeUnit.MILLISECONDS.toDays(to.getTimeInMillis() - from.getTimeInMillis());} 

读书人网 >J2SE开发

热点推荐