`

获取两个日期之间的月份数与天数

    博客分类:
  • Java
 
阅读更多
 /**
     * 返回一个二维数组,单位分别是月和日,代表两个Date之差。 <br>
     * 本方法忽略小时和分钟。 <br>
     * <br>
     * 例: <br>
     * 1,2012年6月1日到2012年6月3日,返回值是[0,2] (2天) <br>
     * 2,2012年6月15日到2012年8月4日,返回值是[1,20] (1个月零20天) <br>
     * 3,2011年11月3日到2013年1月14日,返回值是[14,11] (14个月零11天)
     * 
     * @param olderDate
     *            较早的日期
     * @param newerDate
     *            较晚的日期
     */

public static int[] getDateDifferenceInMonthAndDay(Date olderDate, Date newerDate)
            throws IllegalAugumentException
    {
        int[] differenceInMonthAndDay = new int[2];
        int years = 0;
        int months = 0;
        int days = 0;

        Calendar older = Calendar.getInstance();
		Calendar newer = Calendar.getInstance();
		older.setTime(olderDate);
		newer.setTime(newerDate);
		
        if(olderDate.getTime()>newerDate.getTime()){
        	throw new IllegalAugumentException();
        }else{
        	years = newer.get(Calendar.YEAR)-older.get(Calendar.YEAR);
        	if(years>=0){
        		
        		months = newer.get(Calendar.MONTH)-older.get(Calendar.MONTH)+12*years;
            	older.add(Calendar.MONTH,months);
            	days = newer.get(Calendar.DATE)-older.get(Calendar.DATE);
            	
            	if(days<0){
            		months = months - 1;
            		older.add(Calendar.MONTH,-1);
            	}
            	
            	days = daysBetween(newer.getTime(),older.getTime());
            	differenceInMonthAndDay[0] = months;
            	differenceInMonthAndDay[1] = days;
        	}
        	
        }  
        return differenceInMonthAndDay;
    }

   /**
     * 取两个Date之间的天数差<br>
     * <br>例:newerDate是6月3日,olderDate是5月31日,则应返回3
     * <br>一个更极端的列子:newerDate是6月3日 00:01,olderDate是6月2日 23:59,则应返回1,说明相差一天,即便实际上只差2分钟
     * <br>此代码来自网上
     * <br>http://blog.csdn.net/rmartin/article/details/1452867
     * @param newerDate
     * @param olderDate
     * @return
     */
    public static int daysBetween(Date newerDate, Date olderDate)
    {
        Calendar cNow = Calendar.getInstance();
        Calendar cReturnDate = Calendar.getInstance();
        cNow.setTime(newerDate);
        cReturnDate.setTime(olderDate);
        setTimeToMidnight(cNow);
        setTimeToMidnight(cReturnDate);
        long todayMs = cNow.getTimeInMillis();
        long returnMs = cReturnDate.getTimeInMillis();
        long intervalMs = todayMs - returnMs;
        return millisecondsToDays(intervalMs);
    }

    private static int millisecondsToDays(long intervalMs)
    {
        return (int) (intervalMs / (1000 * 86400));
    }

    private static void setTimeToMidnight(Calendar calendar)
    {
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
    }

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    两个时间间隔的天数

    这段代码提供了一个JavaScript函数 `functionDateDiff`,用于计算两个日期字符串之间相隔的天数。 #### 函数解析 - **参数**: - `sDate1`:表示起始日期的字符串。 - `sDate2`:表示结束日期的字符串。 - 这两...

    计算两个日期相差的天数

    首先,我们可以使用 Calendar 对象的 setTime 方法将两个日期设置到 Calendar 对象中,然后使用 getTimeInMillis 方法获取两个日期的毫秒值。最后,我们可以使用这两个毫秒值计算出日期之间的天数。 以下是计算两个...

    Java 计算两个日期之间相差的月数

    总的来说,Java提供了多种方式来计算两个日期之间相差的月数,选择哪种方法取决于你的具体需求,如是否需要考虑日期中的天数,以及是否处理跨闰年的边界问题。对于简单的情况,`ChronoUnit.MONTHS.between()`就足够...

    计算2个日期相差天数、去除节假日周末

    接下来,我们需要一个函数来计算两个日期之间的总天数。C++标准库中的`chrono`模块可以方便地处理日期和时间的计算。我们可以通过`std::chrono::days`来表示日期差: ```cpp std::chrono::days daysBetween(const ...

    指定两个日期计算相隔的天数

    在编程和数据分析中,计算两个日期之间的差值是一项常见的任务,...了解以上概念后,你可以根据具体需求选择合适的编程语言或工具来计算两个日期之间的天数。无论是开发应用程序还是进行数据处理,这个功能都极其实用。

    Java中封装的全局日期处理工具类

    获取SimpleDateFormat 获取日期中的某数值。...获取两个日期相差的毫秒数 。 获得两个日期之间的连续日期.。 将时间转换为时间戳。 获取连续月份。 两个时间相差距离中文描述 。 比较两个时间的大小。

    Java编程输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。

    - 首先,通过用户输入获取两个日期。 - 使用`DateType`类来表示日期,并通过`bool`方法判断两个日期是否相同。 - 通过`ZongTian`方法计算每个日期距离某个参考点(通常是公元0年1月1日)的总天数,从而计算出两日...

    根据年月获取这个月份的所有日期

    5. **alert()函数**:`alert()`在这里用来显示每个日期,实际应用中可能会用到其他方式,如存储在数组中或输出到控制台。 总结来说,这个函数通过创建`Date`对象并利用其属性和方法,结合循环结构和字符串操作,...

    计算日期差

    本文将详细讲解如何计算两个日期之间的差值,包括天数、小时、分钟和秒数。我们将基于Java语言,通过分析提供的`DateDays.java`和`Date`文件来探讨这一主题。 首先,Java提供了`java.util.Date`类来表示日期和时间...

    Java日期工具类

    16、计算传入的两个日期之间相差的天数 17、根据传入的年月返回该月的第一天 18、根据传入的年月返回该月最后的一天 19、获得当前月份的第一天 20、获得当前月份的最后一天 21、获取上月的第一天 22、获取上月的最后...

    AS3指定的两个公历日期相差天数类库

    - 首先获取两个日期的年份,并判断它们是否相同。 - 如果相同,则直接调用`alreadyOverDay`方法计算天数差。 - 如果相差一年,则根据年份顺序调整计算方式。 - 如果相差多年,则计算跨年数并遍历每一年进行累加...

    js实现获取两个日期之间所有日期的方法

    下面将详细介绍如何使用JavaScript来实现获取两个日期之间所有日期的方法,并解读相关操作技巧。 首先,JavaScript中的Date对象是处理日期和时间的基础工具。通过Date对象提供的方法,我们可以创建日期对象、获取...

    DB2 计算相差天数(时间)

    DB2 计算相差天数(时间),打个比方你要计算2013-10-20到2014-03-01的天数

    ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例

    使用 CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES' 函数可以获取两个日期的年数。 11. 获取星期信息 使用 GET_WEEK_INFO_BASED_ON_DATE 函数可以获取星期信息,例如星期几、周一的日期、周日的日期等。 12. 弹...

    java获取两个时间的相隔时间,包括年、月、日、时、分、秒

    在Java编程中,计算两个日期之间的差异是一项常见的任务,它涉及到日期和时间的处理。`DateUtils.java` 文件很可能是包含一个工具类,用于帮助我们完成这个任务。在这个类中,可能包含了各种方法来计算两个`java....

    计算日期相差天数

    计算两个日期之间相差的天数,可以简单地用结束日期减去开始日期,然后取其总天数。在C#中,这可以通过以下方式实现: ```csharp DateTime startDate = new DateTime(2022, 1, 1); DateTime endDate = new DateTime...

    获取月份天数

    在编程领域,尤其是在开发日历或者时间相关的应用时,经常需要获取特定月份的天数。在C#和VB.NET这两种.NET框架下的编程语言中,有多种方式可以实现这个功能。以下将详细介绍标题和描述中提到的三种方法。 方法一:...

    Js获取当前日期时间及格式化代码

    其他日期时间脚本库方法包括日期计算、日期比较、日期转字符串、日期分割为数组、取日期的部分信息、获取日期所在月的最大天数、判断日期所在年的第几周、字符串转换为日期型、验证日期有效性、完整日期时间检查以及...

    javascript获取当月天数

    - 计算两个日期之间的天数差。 - 获取上个月或下个月的天数。 通过以上分析,我们不仅了解了如何使用 JavaScript 来获取当前月份的天数,还掌握了一种通用的日期处理技巧。这将有助于我们在实际项目中更高效地进行...

    指定日期算秒

    例如,在C#中,`DateTime`对象之间的减法会返回一个`TimeSpan`对象,它包含了两个日期之间的时间间隔,包括天数、小时数、分钟数和秒数。我们可以使用`TimeSpan.TotalSeconds`属性来获取总秒数。 "每个月起始秒数 ...

Global site tag (gtag.js) - Google Analytics