/*
* $Header$
* $Author$
* $Revision$
* $Date$
*
* ====================================================================
*
* Copyright (C) 2008 by www.loveapple.cn
*
* All copyright notices regarding loveapple and loveapple CoreLib
* MUST remain intact in the scripts, documents and source code.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Correspondence and Marketing Questions can be sent to:
* info at loveapple
*
* @author: loveapple
*/
package cn.loveapple.common.util;
import java.util.Calendar;
/**
* @author loveapple
* @since 2008/09/16
* @version $Revision:$
*/
public final class DateUtils {
/**
* Get from start to end days.
* @param start
* @param end
* @return start-end days
*/
public final static int diffDayCount(Calendar start, Calendar end){
int result = 0;
DayDate startDay = new DayDate(start);
DayDate endDay = new DayDate(end);
if(startDay.equals(endDay) || startDay.equals(startDay.getLastDay(endDay))){
return result;
}
if(startDay.year == endDay.year){
return endDay.dayOfY - startDay.dayOfY;
}else{
Calendar tmp = Calendar.getInstance();
result = startDay.calendar.getActualMaximum(Calendar.DAY_OF_YEAR) - startDay.dayOfY;
for(int i = startDay.year+1; i < endDay.year; i++){
tmp.set(i, tmp.get(Calendar.MONTH), tmp.get(Calendar.DAY_OF_MONTH));
result += tmp.getActualMaximum(Calendar.DAY_OF_YEAR);
}
result += endDay.dayOfY;
}
return result;
}
/**
* Express a data of day.
*
* @author loveapple
* @since 2008/09/16
* @version $Revision:$
*/
private static class DayDate{
int year;
int month;
int dayOfM;
int dayOfY;
Calendar calendar;
public DayDate(Calendar calendar) {
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
dayOfM = calendar.get(Calendar.DAY_OF_MONTH);
dayOfY = calendar.get(Calendar.DAY_OF_YEAR);
this.calendar = calendar;
}
/**
*
* {@inheritDoc}
*/
@Override
public boolean equals(Object obj){
if(obj instanceof DayDate){
DayDate day = (DayDate)obj;
if(day.year == year && day.dayOfY == dayOfY){
return true;
}
return false;
}
return false;
}
/**
*
* @param day
* @return
*/
public DayDate getLastDay(DayDate day){
if(day.year == year){
if(day.dayOfY < dayOfY){
return this;
}
return day;
}else if(day.year < year){
return this;
}
return day;
}
}
}
测试代码
public static void main(String[] args) {
Calendar today = Calendar.getInstance();
Calendar startDay1 = Calendar.getInstance();
startDay1.set(2000, 1, 2);
Calendar startDay2 = Calendar.getInstance();
startDay2.set(today.get(Calendar.YEAR), today.get(Calendar.MONTH), 1);
Calendar startDay3 = Calendar.getInstance();
startDay3.set(today.get(Calendar.YEAR), 1, 1);
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(format.format(startDay1.getTime()) + " - " + format.format(today.getTime()) + " [" + DateUtils.diffDayCount(startDay1, today) + "]");
System.out.println(format.format(startDay2.getTime()) + " - " + format.format(today.getTime()) + " [" + DateUtils.diffDayCount(startDay2, today) + "]");
System.out.println(format.format(startDay3.getTime()) + " - " + format.format(today.getTime()) + " [" + DateUtils.diffDayCount(startDay3, today) + "]");
}
分享到:
相关推荐
纯SQL语句实现,不需要写存储过程或者函数 在MySQL环境下测试过没有问题
该工具类用于两个时间段之间节假日的计算(可获取两个时间段之间的节假日天数,小时,分钟,秒)
计算两日期之间的时间差,输入两个年月日 计算相差天数
本文将详细介绍使用 C# 语言计算两日期之间的工作时间间隔,并排除非工作日。同时,也会计算下一个工作时间点。 日期时间处理 在 C# 中,日期和时间可以使用 `DateTime` 结构体来表示。`DateTime` 结构体提供了...
在IT领域,尤其是在编程实践中,计算两个日期之间的天数是一项常见的任务。在给定的场景中,我们讨论的是一个使用Visual Studio 2010(VS2010)开发的小程序,它专门用于实现这一功能。这个程序的名称是`TimeCompute...
在编程领域,计算两个日期之间的天数是一项常见的任务,尤其在处理时间相关的应用程序时。Dephi,作为一个强大的Object Pascal开发环境,提供了丰富的日期和时间处理功能。本篇将详细介绍如何在Dephi中实现这个功能...
在Delphi编程环境中,计算两个日期之间的时间差是一项常见的任务,尤其对于开发涉及日期和时间处理的应用程序来说。本示例源码专为Delphi初学者设计,它演示了如何在Delphi 7中计算两个日期之间的天数差异。下面我们...
计算除周六日、法定节假日以外两个日期之间的间隔天数
本文将详细介绍如何使用SQL来实现计算两个日期相差多少年、月、日的方法,并通过具体的示例代码来帮助理解这一过程。 ### 一、背景介绍 在实际应用中,我们经常需要知道两个日期之间相差的具体年数、月数和天数,...
在IT行业中,处理时间数据是一项常见的任务,尤其是在需要计算两个日期之间的工作日数量时。本篇内容主要介绍了如何编写一个函数来计算两个指定日期之间的实际工作日天数(排除周末和节假日)。这种方法在诸如财务...
编写一个java程序ex09 功能:用户从键盘输入两个日期(都包括年月日),程序计算两个日期之间相隔的天数,并输出。
该SQL函数名为`limit_day`,主要用途是计算两个日期之间的差值(工作日),即在计算过程中排除周末(假设周末为周六和周日)。这对于人力资源管理、项目进度监控等场景非常有用,因为它可以帮助我们准确地了解两个...
- `TimeUnit`方法:使用`TimeUnit.between`方法可以直接计算两个日期间的差值,单位可以是天、小时等。例如: ```java long diffInMilliseconds = Math.abs(date2.getTime() - date1.getTime()); long daysDiff ...
计算两个日期相隔天数并减去节假日,这个可以使用在各种需要通知的场景以及工作日提醒等
计算两日期之间的差,看看两日期之间能差几个月的问题
oracle语句查询两个日期之间星期六、星期日的天数
eclipse,JAVA,俩日期间的天数计算。console处输入俩日期,输入年份可为公元前(但两个年份不可相差太大,太大不可计算),输入月份及天数不符合实际状况时,会做相应提醒。PS:日期输入时,先大后小,还是先小后大...
在很多业务场景中,我们需要计算两个日期之间的差距,比如计算用户的注册天数、订单的有效期等。这些计算通常涉及到日期的转换、格式化以及时间戳的运算。 #### 二、解决方案概述 在Java中,可以通过多种方式来...
DB2 计算相差天数(时间),打个比方你要计算2013-10-20到2014-03-01的天数
"2日期相隔天数计算"是一个基本但至关重要的功能,它可以帮助我们理解两个特定日期之间的差异。以下是对这个主题的详细解释。 首先,我们需要明确日期的表示方式。在计算机中,日期通常以年、月、日的形式存储,如...