⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dateutils.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.ctk.common;

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

public class DateUtils
{
	public static final int ONE_SECOND = 1000;

	public static final int ONE_MINUTE = 60000;

	public static final int ONE_HOUR = 3600000;

	public static final long ONE_DAY = 86400000L;

	public static final long ONE_WEEK = 604800000L;

	/**
	 * get the begin of today,2006-09-15 00:00:00 000
	 * @return
	 */
	public static Date getBeginOfToday()
	{
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 将java.util.Date转换为java.sql.Date
	 * @param date
	 * @return
	 */
	public static java.sql.Date getSQLDate(Date date)
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		java.sql.Date sd = new java.sql.Date(cal.getTimeInMillis());
		return sd;
	}

	/**
	 * get now
	 * @return
	 */
	public static Date getNow()
	{
		Calendar cal = new GregorianCalendar();
		return cal.getTime();
	}

	/**
	 * 得到当前时间,返回值为java.sql.Date类型
	 * @return
	 */
	public static java.sql.Date getSQLNow()
	{
		return getSQLDate(getNow());
	}

	/**
	 * get the begin of day,2006-09-15 00:00:00 000
	 * @param date
	 * @return
	 */
	public static Date getBeginOfDay(Date date)
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		Date ds = new Date(cal.getTimeInMillis());
		return ds;
	}

	/**
	 * 得到当前日期的凌晨12点59分59秒
	 * @return
	 */
	public static Date getEndOfToday()
	{
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		cal.set(Calendar.MILLISECOND, 999);
		return cal.getTime();
	}

	/**
	 * 得到下一天
	 * @param date
	 * @return
	 */
	public static Date getNextDay(Date date)
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
		return cal.getTime();
	}

	/**
	 * 得到上一天
	 * @return
	 */
	public static Date getTomorrow()
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(getBeginOfToday());
		cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
		return cal.getTime();
	}

	/**
	 * 得到指定日期的下一天
	 * @param date
	 * @return
	 */
	public static Date getNextMonth(Date date)
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
		return cal.getTime();
	}

	/**
	 * 得到指定日期的上一天
	 * @param date
	 * @return
	 */
	public static Date getPreviousDay(Date date)
	{
		Calendar cal = new GregorianCalendar();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}

	/**
	 * 得到两个日期之间的时间间隔
	 * @param interval
	 * @param dDate1
	 * @param dDate2
	 * @return
	 */
	public static long dateDiff(DateIntervalTypeEnum interval, Date dDate1,
			Date dDate2)
	{
		int desiredField = 0;
		int coef = 1;
		Date date1;
		Date date2;
		if (dDate1.getTime() > dDate2.getTime())
		{
			coef = -1;
			date1 = dDate2;
			date2 = dDate1;
		} else
		{
			date1 = dDate1;
			date2 = dDate2;
		}
		int field;
		if (interval.equals(DateIntervalTypeEnum.YEAR))
			field = Calendar.YEAR;
		else if (interval.equals(DateIntervalTypeEnum.MONTH))
			field = Calendar.MONTH;
		else if (interval.equals(DateIntervalTypeEnum.DAY))
			field = Calendar.DAY_OF_MONTH;
		else if (interval.equals(DateIntervalTypeEnum.WEEK))
			field = Calendar.WEEK_OF_MONTH;
		else if (interval.equals(DateIntervalTypeEnum.HOUR))
		{
			field = Calendar.DATE;
			desiredField = Calendar.HOUR_OF_DAY;
		} else if (interval.equals(DateIntervalTypeEnum.MINUTE))
		{
			field = Calendar.DATE;
			desiredField = Calendar.MINUTE;
		} else if (interval.equals(DateIntervalTypeEnum.SECOND))
		{
			field = Calendar.DATE;
			desiredField = Calendar.SECOND;
		} else
		{
			throw new IllegalArgumentException("unkown interval!");
		}
		Calendar calTmp = Calendar.getInstance();
		calTmp.setTime(date1);
		long nbOccurence = 0L;
		calTmp.add(field, 1);
		Date dateTemp = calTmp.getTime();
		while (dateTemp.getTime() <= date2.getTime())
		{
			calTmp.add(field, 1);
			dateTemp = calTmp.getTime();
			nbOccurence++;
		}
		if (desiredField == Calendar.HOUR_OF_DAY
				|| desiredField == Calendar.MINUTE
				|| desiredField == Calendar.SECOND)
		{
			calTmp.setTime(date1);
			calTmp.add(field, (int) nbOccurence);
			dateTemp = calTmp.getTime();
			switch (desiredField) {
			case Calendar.HOUR_OF_DAY:
				nbOccurence *= 24L;
				break;
			case Calendar.MINUTE:
				nbOccurence = nbOccurence * 24L * 60L;
				break;
			case Calendar.SECOND:
				nbOccurence = nbOccurence * 24L * 60L * 60L;
				break;
			}
			calTmp.add(desiredField, 1);
			dateTemp = calTmp.getTime();
			while (dateTemp.getTime() <= date2.getTime())
			{
				calTmp.add(desiredField, 1);
				dateTemp = calTmp.getTime();
				nbOccurence++;
			}
		}
		return nbOccurence * coef;
	}

	/**
	 * 得到当前月的第一天
	 * @return
	 */
	public static Date getFirstDayOfCurMonth()
	{
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMinimum(Calendar.DAY_OF_MONTH));
		return getBeginOfDay(cal.getTime());
	}

	/**
	 * 得到当前月的最后一天
	 * @return
	 */
	public static Date getEndDayOfCurMonth()
	{
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMaximum(Calendar.DAY_OF_MONTH));
		return getBeginOfDay(cal.getTime());
	}

	/**
	 * 格式化日期为"yyyy-MM-dd"形式
	 * @param d
	 * @return
	 */
	public static String formatDate(Date d)
	{
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		return df.format(d);
	}

	/**
	 * 得到两个日期中较大者
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getMax(Date date1, Date date2)
	{
		if (date1 == null)
			return date2;
		if (date2 == null)
			return date1;
		if (date1.after(date2))
			return date1;
		return date2;
	}

	/**
	 * 得到两个日期中较小者
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getMin(Date date1, Date date2)
	{
		if (date1 == null)
			return date2;
		if (date2 == null)
			return date1;
		if (date1.after(date2))
			return date2;
		return date1;
	}

	/**
	 * 得到year年month月的天数
	 * @param year
	 * @param month
	 * @return
	 */
	public static int daysOfMonth(int year, int month)
	{
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			if (isLeap(year))
				return 29;
			return 28;
		default:
			return 0;
		}
	}

	/**
	 * 在指定日期基础上加若干天
	 * @param date
	 * @param day
	 * @return
	 */
	public static Date addDay(Date date, int day)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(5, day);
		Date d = calendar.getTime();
		return d;
	}

	/**
	 * 在指定日期基础上加若干小时
	 * @param date
	 * @param l
	 * @return
	 */
	public static Date addHour(Date date, long l)
	{
		long oldD = date.getTime();
		long deltaD = l * 60L * 60L * 1000L;
		long newD = oldD + deltaD;
		Date d = new Date(newD);
		return d;
	}

	/**
	 * 在指定日期基础上加若干分钟
	 * @param date
	 * @param l
	 * @return
	 */
	public static Date addMinute(Date date, long l)
	{
		long oldD = date.getTime();
		long deltaD = l * 60L * 1000L;
		long newD = oldD + deltaD;
		Date d = new Date(newD);
		return d;
	}

	/**
	 * 在指定日期基础上加若干月
	 * @param date
	 * @param i
	 * @return
	 */
	public static Date addMonth(Date date, int i)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int month = calendar.get(Calendar.MONTH);
		month += i;
		int deltaY = month / 12;
		month %= 12;
		calendar.set(Calendar.MONTH, month);
		if (deltaY != 0)
		{
			int year = calendar.get(Calendar.YEAR);
			calendar.set(Calendar.YEAR, deltaY + year);
		}
		return calendar.getTime();
	}

	/**
	 * 在指定日期基础上加若干秒
	 * @param date
	 * @param l
	 * @return
	 */
	public static Date addSecond(Date date, long l)
	{
		long oldD = date.getTime();
		long deltaD = l * 1000L;
		long newD = oldD + deltaD;
		Date d = new Date(newD);
		return d;
	}

	/**
	 * 在指定日期基础上加若干年
	 * @param date
	 * @param i
	 * @return
	 */
	public static Date addYear(Date date, int i)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int year = calendar.get(Calendar.YEAR);
		calendar.set(Calendar.YEAR, i + year);
		return calendar.getTime();
	}

	/**
	 * 判断一年是否是闰年
	 * @param year
	 * @return
	 */
	public static boolean isLeap(int year)
	{
		boolean divBy4 = (year % 4 == 0);
		boolean divBy100 = (year % 100 == 0);
		boolean divBy400 = (year % 400 == 0);
		return divBy4 && (!divBy100 || divBy400);
	}
	
	public static Date parse(String strDate) throws ParseException
	{
		return org.apache.commons.lang.time.DateUtils.parseDate(strDate,
				new String[] {"yyyy-MM-dd","yyyy年MM月dd日","MM/dd/yyyy"});
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -