JAVA计算两个日期相差的实例

2014-02-14  来源:本站原创  分类:Java  人气:7 

在java中我找了一下关于计算两个日期之间相差的天数方法有10多种实现方法,下面总结一下常用的几种计算两个日期之间相差的天数实例

在Java开发物流或是其他功能的时候会用到两个日期 相差多天的数据,所以整理了一下备用。
调用方式:

long date1 = getDateTime("20121201");//可改成自己的日期类型,但以 “20121212”这种格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
System.out.println(day);

具体实现方法调用:

复制代码 代码如下:

/**
 * 计算出两个日期之间相差的天数
 * 建议date1 大于 date2 这样计算的值为正数
 * @param date1 日期1
 * @param date2 日期2
 * @return date1 - date2
 */
public static int dateInterval(long date1, long date2) {
    if(date2 > date1){
        date2 = date2 + date1;
        date1 = date2 - date1;
        date2 = date2 - date1;
    } 

     // Canlendar 该类是一个抽象类
     // 提供了丰富的日历字段
     // 本程序中使用到了
     // Calendar.YEAR    日期中的年份
     // Calendar.DAY_OF_YEAR     当前年中的天数
     // getActualMaximum(Calendar.DAY_OF_YEAR) 返回今年是 365 天还是366 天
    Calendar calendar1 = Calendar.getInstance(); // 获得一个日历
    calendar1.setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当 前时间值。   

    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTimeInMillis(date2);
    // 先判断是否同年
    int y1 = calendar1.get(Calendar.YEAR);
    int y2 = calendar2.get(Calendar.YEAR); 

    int d1 = calendar1.get(Calendar.DAY_OF_YEAR);
    int d2 = calendar2.get(Calendar.DAY_OF_YEAR);
    int maxDays = 0;
    int day = 0;
    if(y1 - y2 > 0){
        day = numerical(maxDays, d1, d2, y1, y2, calendar2);
    }else{
        day = d1 - d2;
    }
    return day;
}   

/**
 * 日期间隔计算
 * 计算公式(示例):
 *      20121201- 20121212
 *      取出20121201这一年过了多少天 d1 = 天数  取出 20121212这一年过了多少天 d2 = 天数
 *      如果2012年这一年有366天就要让间隔的天数+1,因为2月份有 29日。
 * @param maxDays   用于记录一年中有365天还是366天
 * @param d1    表示在这年中过了多少天
 * @param d2    表示在这年中过了多少天
 * @param y1    当前为2012年
 * @param y2    当前为2012年
 * @param calendar  根据日历对象来获取一年中有多少天
 * @return  计算后日期间隔的天数
 */
public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){
    int day = d1 - d2;
    int betweenYears = y1 - y2;
    List<Integer> d366 = new ArrayList<Integer>(); 

    if(calendar.getActualMaximum(Calendar.DAY_OF_YEAR) == 366){
        System.out.println(calendar.getActualMaximum (Calendar.DAY_OF_YEAR));
        day += 1;
    } 

    for (int i = 0; i < betweenYears; i++) {
        // 当年 + 1 设置下一年中有多少天
        calendar.set(Calendar.YEAR, (calendar.get (Calendar.YEAR)) + 1);
        maxDays = calendar.getActualMaximum (Calendar.DAY_OF_YEAR);
        // 第一个 366 天不用 + 1 将所有366记录,先不进行 加入然后再少加一个
        if(maxDays != 366){
            day += maxDays;
        }else{
            d366.add(maxDays);
        }
        // 如果最后一个 maxDays 等于366 day - 1
        if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
            day -= 1;
        }
    } 

    for(int i = 0; i < d366.size(); i++){
        // 一个或一个以上的366天
        if(d366.size() >= 1){
            day += d366.get(i);
        }
    }
    return day;
} 

/**
 * 将日期字符串装换成日期
 * @param strDate   日期支持年月日 示例:yyyyMMdd
 * @return  1970年1月1日器日期的毫秒数
 */
public static long getDateTime(String strDate) {
    return getDateByFormat(strDate, "yyyyMMdd").getTime();
} 

/**
 * @param strDate   日期字符串
 * @param format    日期格式
 * @return      Date
 */
public static Date getDateByFormat(String strDate, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    try{
        return (sdf.parse(strDate));
    }catch (Exception e){
        return null;
    }
}

例2

复制代码 代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test16 {
 /**
  * @param args
  * @throws ParseException
  */
 public static void main(String[] args) throws ParseException {
  // TODO Auto-generated method stub
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date d1=sdf.parse("2012-09-08 10:10:10");
  Date d2=sdf.parse("2012-09-15 00:00:00");
  System.out.println(daysBetween(d1,d2));
  System.out.println(daysBetween("2012-09-08 10:10:10","2012-09 -15 00:00:00"));
 }

 /**
     * 计算两个日期之间相差的天数
     * @param smdate 较小的时间
     * @param bdate  较大的时间
     * @return 相差天数
  * @throws ParseException
     */
    public static int daysBetween(Date smdate,Date bdate) throws ParseException
    {
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM- dd");
     smdate=sdf.parse(sdf.format(smdate));
     bdate=sdf.parse(sdf.format(bdate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis ();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis ();
        long between_days=(time2-time1)/ (1000*3600*24);

       return Integer.parseInt(String.valueOf (between_days));
    }  

/**
*字符串的日期格式的计算
*/
    public static int daysBetween(String smdate,String bdate) throws ParseException{
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM- dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(smdate));
        long time1 = cal.getTimeInMillis ();
        cal.setTime(sdf.parse(bdate));
        long time2 = cal.getTimeInMillis ();
        long between_days=(time2-time1)/ (1000*3600*24);

       return Integer.parseInt(String.valueOf (between_days));
    }
}

例3

复制代码 代码如下:

//取得剩余天数
   SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
   Date d0=new java.util.Date();
   Date d1=df.parse(end_date);
   long time0=d0.getTime();
   long time1=d1.getTime();
   System.out.println((time1-time0)/(1000*60*60*24));

这样算两个时间相差的天数比较好

复制代码 代码如下:

/**
     * 计算两个日期之间相差的天数
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int diffdates(Date date1, Date date2) {
        int result = 0;
        ElapsedTime et = new ElapsedTime();
        GregorianCalendar gc1 = new GregorianCalendar ();
        GregorianCalendar gc2 = new GregorianCalendar ();
        gc1.setTime(date1);
        gc2.setTime(date2);
        result = et.getDays(gc1, gc2);
        return result;
    }

然后ElapseTime中的方法是:

复制代码 代码如下:

public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
  int elapsed = 0;
  GregorianCalendar gc1, gc2;
  if (g2.after(g1)) {
   gc2 = (GregorianCalendar) g2.clone();
   gc1 = (GregorianCalendar) g1.clone();
  } else {
   gc2 = (GregorianCalendar) g1.clone();
   gc1 = (GregorianCalendar) g2.clone();
  }
  gc1.clear(Calendar.MILLISECOND);
  gc1.clear(Calendar.SECOND);
  gc1.clear(Calendar.MINUTE);
  gc1.clear(Calendar.HOUR_OF_DAY);
  gc2.clear(Calendar.MILLISECOND);
  gc2.clear(Calendar.SECOND);
  gc2.clear(Calendar.MINUTE);
  gc2.clear(Calendar.HOUR_OF_DAY);
  while (gc1.before(gc2)) {
   gc1.add(Calendar.DATE, 1);
   elapsed++;
  }
  return elapsed;
}

其实使用joda最简单

复制代码 代码如下:

public boolean isRentalOverdue(DateTime datetimeRented) {
  Period rentalPeriod = Period.days(2);
  return datetimeRented.plus(rentalPeriod).isBeforeNow()
}
相关文章
  • JAVA计算两个日期相差的实例 2014-02-14

    在java中我找了一下关于计算两个日期之间相差的天数方法有10多种实现方法,下面总结一下常用的几种计算两个日期之间相差的天数实例 在Java开发物流或是其他功能的时候会用到两个日期 相差多天的数据,所以整理了一下备用. 调用方式: long date1 = getDateTime("20121201");//可改成自己的日期类型,但以 "20121212"这种格式 long date2 = getDateTime("20121212"); int

  • java计算两个日期相差天数 2011-04-24

    1.public class Test { 2.public void dateDiff(String startTime, String endTime, String format) { 3.//按照传入的格式生成一个simpledateformate对象 4.SimpleDateFormat sd = new SimpleDateFormat(format); 5.long nd = 1000*24*60*60;//一天的毫秒数 6.long nh = 1000*60*60;//一小时的毫

  • Java计算两个日期时间相差 2013-04-01

    Java计算两个日期时间相差几天,几小时,几分钟,其实好简单就可以实现jsp,java中计算两个java时间差了 public class Test { public void dateDiff(String startTime, String endTime, String format) { //按照传入的格式生成一个simpledateformate对象 SimpleDateFormat sd = new SimpleDateFormat(format); long nd = 1000*2

  • php计算两个日期相差天数的方法 2014-03-08

    这篇文章主要介绍了php计算两个日期相差天数的方法,实例分析了php操作日期的技巧,需要的朋友可以参考下 本文实例讲述了php计算两个日期相差天数的方法.分享给大家供大家参考.具体实现方法如下: <?php /** * 求两个日期之间相差的天数 * (针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day2 * @return number */ function diffBetweenTwoDays ($day

  • MSSQL 计算两个日期相差的工作天数的语句 2014-02-02

    MSSQL计算两个日期相差的工作天数的代码,需要的朋友可以参考下. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDay]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[f_WorkDay] GO --计算两个日期相差的工作天数 CREATE FUNCTION f_WorkDay( @dt_begin datetime,

  • javaScript 计算两个日期的天数相差(示例代码) 2015-01-11

    本篇文章主要介绍了javaScript 计算两个日期的天数相差(示例代码) 需要的朋友可以过来参考下,希望对大家有所帮助 一:计算两个日期相差的天数 比如: str1 = "2002-01-20" str2 = "2002-10-11" 怎样用javaScript计算出str1与str2之间相差的天数? <html> <head> <meta http-equiv="Content-Type" content=&qu

  • php计算两个日期时间差(返回年.月.日) 2014-11-09

    这篇文章主要介绍了php计算两个日期时间差(返回年.月.日),实现了类似微博中的多少天.多少月.多少前前功能,需要的朋友可以参考下 在PHP程序中,很多时候都会遇到处理时间的问题,比如:判断用户在线了多长时间,共登录了多少天,两个帖子发布的时间差或者是不同操作之间的日志记录等等.在文章中,简单地举例介绍了PHP中如何计算两个日期相差 年.月.日. <?php /** +---------------------------------------------------------- * 功能:

  • 用javascript实现计算两个日期的间隔天数 2013-11-05

    ASP 里面计算两个时间的差距可以 DateDiff,但 javascript 里面没有,需要手写函数. js 里面居然可以直接 Date1-Date2,而且还是转换为毫秒计算时间差的. // 计算两个日期的间隔天数 function DateDiff(sDate1, sDate2){ //sDate1和sDate2是2002-12-18格式 var aDate, oDate1, oDate2, iDays aDate = sDate1.split("-") oDate1 = new

  • JavaScript计算两个日期时间段内日期的方法 2014-12-11

    这篇文章主要介绍了JavaScript计算两个日期时间段内日期的方法,涉及javascript操作时间的技巧,需要的朋友可以参考下 本文实例讲述了JavaScript计算两个日期时间段内日期的方法.分享给大家供大家参考.具体实现方法如下: /************************* * 计算两个日期时间段内所有日期 * * @param value1 * 开始日期 YYYY-MM-DD * @param value2 * 结束日期 * return 日期数组 */ function d

  • java中字符串与日期的转换实例 2013-10-03

    java中字符串与日期的转换实例,需要的朋友可以参考一下 import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateIO { public static void main(String[] args) { Date date=

  • 探讨:如何使用PHP实现计算两个日期间隔的年.月.周.日数 2015-02-01

    本篇文章是对使用PHP实现计算两个日期间隔的年.月.周.日数的方法进行了详细的分析介绍,需要的朋友参考下 使用PHP实现计算两个日期间隔的年.月.周.日数: <?php function format($a,$b){ //检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大 if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a); $start = strtotime($a); $stop = strtotime($b)

  • 从'计算两个日期天数之差'程序介绍RPG语言 2012-01-15

    RPG,这个不是 Role Playing Game 的缩写,而是一种编程语言,Report Program Generator的缩写,是一种起源于用在DEC及IBM的小型机操作系统中编制报表程序的编程语言,一种运行在IBM的AS400小型机上的高级语言,一种完全过程化的程序语言.下面的这段代码是用来计算两个日期之差的天数: H* H* Author : KXT H* D* D TOTAL_DAYS S 8S 0 D BEGIN_REMAIN S 3S 0 D END_PASS S 3S 0 D

  • 用PostgreSQL计算两个日期的差(毫秒) 2014-10-13

    其实PostgreSQL 的参数已经很详细了,同样可以轻而易举的计算出两个日期的差,你也不需要添加新的Func(多看API还是很重要的) select extract(epoch FROM ('2001-04-11' - timestamp '2001-04-10'))

  • 计算两个日期之间的所有日期 2014-10-02

    Java代码 #!/bin/bash #$1<=$2 startdate="$1" date1=$(date-d"$1""+%s") date2=$(date-d"$2""+%s") date_count=$(echo"$date2-$date1"|bc) day_m=$(echo"$date_count"/86400|bc) for((sdate=0;sdat

  • JS计算两个日期天数差 2012-12-11

    最近在做的项目,要求判断规定日期内做了那些事情,不应该做什么事情.所以就找了些资料,修改了一下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title></title> <script language="JavaScript"> function Co

  • JAVA时间日期处理类实例 2014-07-07

    这篇文章主要介绍了JAVA时间日期处理类,可实现遍历两个日期之间的每一天的功能,涉及针对日期的常见操作技巧,需要的朋友可以参考下 本文实例讲述了JAVA时间日期处理类,主要用来遍历两个日期之间的每一天.分享给大家供大家参考.具体如下: /** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */ import java.text.DecimalFormat; import java.text.Pars

  • js计算两个时间之间天数差的实例代码 2014-07-07

    这篇文章主要介绍了js计算两个时间之间天数差的实例代码,有需要的朋友可以参考一下 //判断是否为闰年 function isLeapYear(year){ if(year % 4 == 0 && ((year % 100 != 0) || (year % 400 == 0))) { return true; } return false; } //判断前后两个日期 function validatePeriod(fyear,fmonth,fday,byear,bmonth,bday){ i

  • 计算一段日期内的周末天数的php代码(星期六,星期日总和) 2015-04-05

    算法没什么难点,核心思想就是将这个时间段调整为7的整数,然后乘以2,在减去或加上多算和少算的周六或周日,得到的就是星期六和星期日的总和. /* | Author: Yang Yu <[email protected]> | @param char|int $start_date 一个有效的日期格式,例如:20091016,2009-10-16 | @param char|int $end_date 同上 | @return 给定日期之间的周末天数 */ function get_weekend

  • PHP使用strtotime计算两个给定日期之间天数的方法 2014-01-10

    这篇文章主要介绍了PHP使用strtotime计算两个给定日期之间天数的方法,实例分析了php操作时间的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了PHP使用strtotime计算两个给定日期之间天数的方法.分享给大家供大家参考.具体分析如下: PHP的strtotime函数用于将任何英文文本的日期时间描述解析为Unix时间戳.这个函数将使用TZ环境变量(如果有的话)来计算时间戳.如果执行成功它返回一个时间戳,否则返回FALSE.在PHP 5.1.0之前,这个函数将返回-1. $

  • JAVA格式化时间日期的简单实例 2013-11-13

    这篇文章主要介绍了JAVA格式化时间日期的简单实例,有需要的朋友可以参考一下 import java.util.Date; import java.text.DateFormat; /** * 格式化时间类 * DateFormat.FULL = 0 * DateFormat.DEFAULT = 2 * DateFormat.LONG = 1 * DateFormat.MEDIUM = 2 * DateFormat.SHORT = 3 * @author Michael * @version 1