java 计算日期间隔

一、问题:

     1)计算两个时间相差多少天

           如: 2014-05-06 21:00 至 2014-05-07 23:00 为 一天 ( 超过24小时 ) 

     2)计算两个时间间隔多少天

           如: 2014-05-06 21:00 至 2014-05-07 00:01 为 一天 (过 24:00 )

二、代码示例

package Date;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalculateDate {

	/**
	 * 计算两个时间相差多少天,两个时间 间隔 n * 24 个小时
	 * 
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static int daysBetween(long time1, long time2) {

		Calendar cal = Calendar.getInstance();
		cal.setTimeInMillis(time1);
		cal.set(Calendar.HOUR, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);

		Calendar cal2 = Calendar.getInstance();
		cal2.setTimeInMillis(time2);
		cal2.set(Calendar.HOUR, 0);
		cal2.set(Calendar.MINUTE, 0);
		cal2.set(Calendar.SECOND, 0);
		cal2.set(Calendar.MILLISECOND, 0);
		
		long between_days = (cal2.getTimeInMillis() - cal.getTimeInMillis()) / (1000 * 3600 * 24);
		int betweenDays = Math.abs(Integer.parseInt(String.valueOf(between_days)));
		System.out.println("daysBetween:"+betweenDays);
		return betweenDays ;
	}

	/**
	 * 计算两个日期间隔,过 24:00 为一天 
	 * 
	 * @param lateTime
	 * @param earlierTime
	 * @return
	 */
	public static int intervalBetweenDay(long lateTime , long earlierTime){

		Calendar lateCalendar = Calendar.getInstance();       // 较晚时间,20140203
		Date lateDate = new Date(lateTime);
		lateCalendar.setTime(lateDate);
		
		Calendar earlierCalendar = Calendar.getInstance();  // 较早时间 20140201
		Date earlierDate = new Date(earlierTime);  
		earlierCalendar.setTime(earlierDate);
		
		// 保证第二个时间一定大于第一个时间
		if (earlierCalendar.after(lateCalendar)) {
			earlierCalendar = lateCalendar;
		    lateCalendar.setTime(earlierDate);
		}
		
		int betweenYears = lateCalendar.get(Calendar.YEAR) - earlierCalendar.get(Calendar.YEAR);
	    int betweenDays = lateCalendar.get(Calendar.DAY_OF_YEAR) - earlierCalendar.get(Calendar.DAY_OF_YEAR);
	    
	    for (int i = 0; i < betweenYears; i++) {
			   earlierCalendar.set(Calendar.YEAR, (earlierCalendar.get(Calendar.YEAR) + 1));
			   betweenDays += earlierCalendar.getMaximum(Calendar.DAY_OF_YEAR);
			}
	    System.out.println("intervalBetweenDay:" + betweenDays);
	    return betweenDays ;
	 }
	

	
	public static void main(String args[]) {
		
		long curTime = System.currentTimeMillis();
		long otherTime = System.currentTimeMillis() + 86400000L*2 ;        // 1天=86400000  毫秒,2天
		
		int betweenDays = daysBetween(curTime, otherTime); 
		System.out.println("两个时间相差天数:" + betweenDays);
		
		int intervalBetweenDay =intervalBetweenDay(otherTime,curTime ); 
		System.out.println("两个日期间隔天数:" + intervalBetweenDay);
		
		/*
		输出结果:
			daysBetween:2
			两个时间相差天数:2
			intervalBetweenDay:2
			两个日期间隔天数:2
		 */	
		}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值