在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。
调用方式:
代码如下 复制代码
long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
Systemoutprintln(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 该类是一个抽象类
// 提供了丰富的日历字段
// 本程序中使用到了
// CalendarYEAR 日期中的年份
// CalendarDAY_OF_YEAR 当前年中的天数
// getActualMaximum(CalendarDAY_OF_YEAR) 返回今年是 365 天还是366天
Calendar calendar1 = CalendargetInstance(); // 获得一个日历
calendar1setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。
Calendar calendar2 = CalendargetInstance();
calendar2setTimeInMillis(date2);
// 先判断是否同年
int y1 = calendar1get(CalendarYEAR);
int y2 = calendar2get(CalendarYEAR);
int d1 = calendar1get(CalendarDAY_OF_YEAR);
int d2 = calendar2get(CalendarDAY_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(calendargetActualMaximum(CalendarDAY_OF_YEAR) == 366){
Systemoutprintln(calendargetActualMaximum(CalendarDAY_OF_YEAR));
day += 1;
}
for (int i = 0; i < betweenYears; i++) {
// 当年 + 1 设置下一年中有多少天
calendarset(CalendarYEAR, (calendarget(CalendarYEAR)) + 1);
maxDays = calendargetActualMaximum(CalendarDAY_OF_YEAR);
// 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个
if(maxDays != 366){
day += maxDays;
}else{
d366add(maxDays);
}
// 如果最后一个 maxDays 等于366 day - 1
if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
day -= 1;
}
}
for(int i = 0; i < d366size(); i++){
// 一个或一个以上的366天
if(d366size() >= 1){
day += d366get(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 (sdfparse(strDate));
}catch (Exception e){
return null;
}
}
例2
代码如下 复制代码
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
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=sdfparse("2012-09-08 10:10:10");
Date d2=sdfparse("2012-09-15 00:00:00");
Systemoutprintln(daysBetween(d1,d2));
Systemoutprintln(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=sdfparse(sdfformat(smdate));
bdate=sdfparse(sdfformat(bdate));
Calendar cal = CalendargetInstance();
calsetTime(smdate);
long time1 = calgetTimeInMillis();
calsetTime(bdate);
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
/
字符串的日期格式的计算
/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = CalendargetInstance();
calsetTime(sdfparse(smdate));
long time1 = calgetTimeInMillis();
calsetTime(sdfparse(bdate));
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
}
例3
代码如下 复制代码
//取得剩余天数
SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
Date d0=new javautilDate();
Date d1=dfparse(end_date);
long time0=d0getTime();
long time1=d1getTime();
Systemoutprintln((time1-time0)/(1000606024));
这样算两个时间相差的天数比较好
代码如下 复制代码
/
计算两个日期之间相差的天数
@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();
gc1setTime(date1);
gc2setTime(date2);
result = etgetDays(gc1, gc2);
return result;
}
然后ElapseTime中的方法是:
代码如下 复制代码
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2after(g1)) {
gc2 = (GregorianCalendar) g2clone();
gc1 = (GregorianCalendar) g1clone();
} else {
gc2 = (GregorianCalendar) g1clone();
gc1 = (GregorianCalendar) g2clone();
}
gc1clear(CalendarMILLISECOND);
gc1clear(CalendarSECOND);
gc1clear(CalendarMINUTE);
gc1clear(CalendarHOUR_OF_DAY);
gc2clear(CalendarMILLISECOND);
gc2clear(CalendarSECOND);
gc2clear(CalendarMINUTE);
gc2clear(CalendarHOUR_OF_DAY);
while (gc1before(gc2)) {
gc1add(CalendarDATE, 1);
elapsed++;
}
return elapsed;
}
其实使用joda最简单
代码如下 复制代码
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = Perioddays(2);
return datetimeRentedplus(rentalPeriod)isBeforeNow()
}
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class Test {
public static void main(String[] args) {
try {
//时间转换类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdfparse("2014-1-10");
Date date2 = sdfparse("2012-12-20");
//将转换的两个时间对象转换成Calendard对象
Calendar can1 = CalendargetInstance();
can1setTime(date1);
Calendar can2 = CalendargetInstance();
can2setTime(date2);
//拿出两个年份
int year1 = can1get(CalendarYEAR);
int year2 = can2get(CalendarYEAR);
//天数
int days = 0;
Calendar can = null;
//如果can1 < can2
//减去小的时间在这一年已经过了的天数
//加上大的时间已过的天数
if(can1before(can2)){
days -= can1get(CalendarDAY_OF_YEAR);
days += can2get(CalendarDAY_OF_YEAR);
can = can1;
}else{
days -= can2get(CalendarDAY_OF_YEAR);
days += can1get(CalendarDAY_OF_YEAR);
can = can2;
}
for (int i = 0; i < Mathabs(year2-year1); i++) {
//获取小的时间当前年的总天数
days += cangetActualMaximum(CalendarDAY_OF_YEAR);
//再计算下一年。
canadd(CalendarYEAR, 1);
}
Systemoutprintln("天数差:"+days);
} catch (ParseException e) {
eprintStackTrace();
}
}
}
Console:
天数差:386
在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。
调用方式:
代码如下 复制代码
long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
Systemoutprintln(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 该类是一个抽象类
// 提供了丰富的日历字段
// 本程序中使用到了
// CalendarYEAR 日期中的年份
// CalendarDAY_OF_YEAR 当前年中的天数
// getActualMaximum(CalendarDAY_OF_YEAR) 返回今年是 365 天还是366天
Calendar calendar1 = CalendargetInstance(); // 获得一个日历
calendar1setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。
Calendar calendar2 = CalendargetInstance();
calendar2setTimeInMillis(date2);
// 先判断是否同年
int y1 = calendar1get(CalendarYEAR);
int y2 = calendar2get(CalendarYEAR);
int d1 = calendar1get(CalendarDAY_OF_YEAR);
int d2 = calendar2get(CalendarDAY_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 d366 = new ArrayList();
if(calendargetActualMaximum(CalendarDAY_OF_YEAR) == 366){
Systemoutprintln(calendargetActualMaximum(CalendarDAY_OF_YEAR));
day += 1;
}
for (int i = 0; i < betweenYears; i++) {
// 当年 + 1 设置下一年中有多少天
calendarset(CalendarYEAR, (calendarget(CalendarYEAR)) + 1);
maxDays = calendargetActualMaximum(CalendarDAY_OF_YEAR);
// 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个
if(maxDays != 366){
day += maxDays;
}else{
d366add(maxDays);
}
// 如果最后一个 maxDays 等于366 day - 1
if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
day -= 1;
}
}
for(int i = 0; i < d366size(); i++){
// 一个或一个以上的366天
if(d366size() >= 1){
day += d366get(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 (sdfparse(strDate));
}catch (Exception e){
return null;
}
}
例2
代码如下 复制代码
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
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=sdfparse("2012-09-08 10:10:10");
Date d2=sdfparse("2012-09-15 00:00:00");
Systemoutprintln(daysBetween(d1,d2));
Systemoutprintln(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=sdfparse(sdfformat(smdate));
bdate=sdfparse(sdfformat(bdate));
Calendar cal = CalendargetInstance();
calsetTime(smdate);
long time1 = calgetTimeInMillis();
calsetTime(bdate);
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
/
字符串的日期格式的计算
/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = CalendargetInstance();
calsetTime(sdfparse(smdate));
long time1 = calgetTimeInMillis();
calsetTime(sdfparse(bdate));
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
}
例3
代码如下 复制代码
//取得剩余天数
SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
Date d0=new javautilDate();
Date d1=dfparse(end_date);
long time0=d0getTime();
long time1=d1getTime();
Systemoutprintln((time1-time0)/(1000606024));
这样算两个时间相差的天数比较好
代码如下 复制代码
/
计算两个日期之间相差的天数
@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();
gc1setTime(date1);
gc2setTime(date2);
result = etgetDays(gc1, gc2);
return result;
}
然后ElapseTime中的方法是:
代码如下 复制代码
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2after(g1)) {
gc2 = (GregorianCalendar) g2clone();
gc1 = (GregorianCalendar) g1clone();
} else {
gc2 = (GregorianCalendar) g1clone();
gc1 = (GregorianCalendar) g2clone();
}
gc1clear(CalendarMILLISECOND);
gc1clear(CalendarSECOND);
gc1clear(CalendarMINUTE);
gc1clear(CalendarHOUR_OF_DAY);
gc2clear(CalendarMILLISECOND);
gc2clear(CalendarSECOND);
gc2clear(CalendarMINUTE);
gc2clear(CalendarHOUR_OF_DAY);
while (gc1before(gc2)) {
gc1add(CalendarDATE, 1);
elapsed++;
}
return elapsed;
}
其实使用joda最简单
代码如下 复制代码
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = Perioddays(2);
return datetimeRentedplus(rentalPeriod)isBeforeNow()
}
以上就是关于java计算两个日期之间的天数全部的内容,包括:java计算两个日期之间的天数、java中知道两个日期如何获得两个日期之间的天数、java中计算两个日期之间差的天数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)