`
Jameslyy
  • 浏览: 386081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
计算日期差 java, calendar
	/**
	 * calculate calendar different
	 * 
	 * return value List\<Integer\> includes 4 element.
	 * element 0: 0, positive or negative
	 * element 1: year
	 * element 2: month
	 * element 3: day
	 * 
	 * @param now
	 * @param cal
	 * @return
	 */
	public static List<Integer> calDateDiff(Calendar now, Calendar cal) {
       	now.set(Calendar.HOUR, 0);
       	now.set(Calendar.MINUTE, 0);
       	now.set(Calendar.SECOND, 0);
       	now.set(Calendar.MILLISECOND, 0);
       	
       	cal.set(Calendar.HOUR, 0);
       	cal.set(Calendar.MINUTE, 0);
       	cal.set(Calendar.SECOND, 0);
       	cal.set(Calendar.MILLISECOND, 0);
       	
       	// 
       	boolean reverse = false;
       	if(now.before(cal)) {
       		reverse = true;
       		Calendar temp = now;
       		now = cal;
       		cal = temp;
       	} else if(now.after(cal)) {
       		
       	} else {
       		List<Integer> result = new ArrayList<Integer>(4);
           	result.add(0);
           	result.add(0);
           	result.add(0);
           	result.add(0);
       	}
       	
       	int year = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
       	int month = now.get(Calendar.MONTH) - cal.get(Calendar.MONTH);
       	int day = now.get(Calendar.DAY_OF_MONTH) - cal.get(Calendar.DAY_OF_MONTH);
       	if(year == 0) {
       		if(month > 0) {
				if (day < 0) {
					month -= 1;

					Calendar tempCal = Calendar.getInstance();
					tempCal.setTime(cal.getTime());
					day = tempCal.getActualMaximum(Calendar.DAY_OF_MONTH)
							- tempCal.get(Calendar.DAY_OF_MONTH)
							+ now.get(Calendar.DAY_OF_MONTH);

				} 
       		}
       	} else if(year > 0) {
       		if(month == 0) {
       			if(day < 0) {
       				year--;
       				month = 11;
       				// 
       				Calendar tempCal = Calendar.getInstance();
   					tempCal.setTime(cal.getTime());
					day = tempCal
							.getActualMaximum(Calendar.DAY_OF_MONTH)
							- tempCal.get(Calendar.DAY_OF_MONTH)
							+ now.get(Calendar.DAY_OF_MONTH);
       			} 
       		} else if(month > 0) {
       			if(day < 0) {
       				month--;
       				
       				Calendar tempCal = Calendar.getInstance();
   					tempCal.setTime(cal.getTime());
					day = tempCal
							.getActualMaximum(Calendar.DAY_OF_MONTH)
							- tempCal.get(Calendar.DAY_OF_MONTH)
							+ now.get(Calendar.DAY_OF_MONTH);
       			}
       		} else {
       			year--;
       			month = 11 - cal.get(Calendar.MONTH) + now.get(Calendar.MONTH) + 1;
       			if(day < 0) {
       				month--;
       				Calendar tempCal = Calendar.getInstance();
   					tempCal.setTime(cal.getTime());
					day = tempCal
							.getActualMaximum(Calendar.DAY_OF_MONTH)
							- tempCal.get(Calendar.DAY_OF_MONTH)
							+ now.get(Calendar.DAY_OF_MONTH);
       			}
       		}
       	}
       	
       	List<Integer> result = new ArrayList<Integer>(4);
       	result.add(reverse?-1:1);
       	result.add(year);
       	result.add(month);
       	result.add(day);
       	
       	return result;
	}
Global site tag (gtag.js) - Google Analytics