java时间处理工具类--DateUtils

package com.hexiang.utils;



/**

 * @(#)DateUtil.java

 *

 *

 * @author kidd

 * @version 1.00 2007/8/8

 */

import java.util.*;

import java.text.*;

import java.sql.Timestamp;



public class DateUtils {



	/**

	 * 时间范围:年

	 */

	public static final int YEAR = 1;



	/**

	 * 时间范围:季度

	 */

	public static final int QUARTER = 2;



	/**

	 * 时间范围:月

	 */

	public static final int MONTH = 3;



	/**

	 * 时间范围:旬

	 */

	public static final int TENDAYS = 4;



	/**

	 * 时间范围:周

	 */

	public static final int WEEK = 5;



	/**

	 * 时间范围:日

	 */

	public static final int DAY = 6;



	/* 基准时间 */

	private Date fiducialDate = null;



	private Calendar cal = null;



	private DateUtils(Date fiducialDate) {

		if (fiducialDate != null) {

			this.fiducialDate = fiducialDate;

		} else {

			this.fiducialDate = new Date(System.currentTimeMillis());

		}



		this.cal = Calendar.getInstance();

		this.cal.setTime(this.fiducialDate);

		this.cal.set(Calendar.HOUR_OF_DAY, 0);

		this.cal.set(Calendar.MINUTE, 0);

		this.cal.set(Calendar.SECOND, 0);

		this.cal.set(Calendar.MILLISECOND, 0);



		this.fiducialDate = this.cal.getTime();

	}



	/**

	 * 获取DateHelper实例

	 * 

	 * @param fiducialDate

	 *            基准时间

	 * @return Date

	 */

	public static DateUtils getInstance(Date fiducialDate) {

		return new DateUtils(fiducialDate);

	}



	/**

	 * 获取DateHelper实例, 使用当前时间作为基准时间

	 * 

	 * @return Date

	 */

	public static DateUtils getInstance() {

		return new DateUtils(null);

	}



	/**

	 * 获取年的第一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDayOfYear(int offset) {

		cal.setTime(this.fiducialDate);

		cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);

		cal.set(Calendar.MONTH, Calendar.JANUARY);

		cal.set(Calendar.DAY_OF_MONTH, 1);

		return cal.getTime();

	}



	/**

	 * 获取年的最后一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDayOfYear(int offset) {

		cal.setTime(this.fiducialDate);

		cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);

		cal.set(Calendar.MONTH, Calendar.DECEMBER);

		cal.set(Calendar.DAY_OF_MONTH, 31);

		return cal.getTime();

	}



	/**

	 * 获取季度的第一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDayOfQuarter(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.MONTH, offset * 3);

		int mon = cal.get(Calendar.MONTH);

		if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {

			cal.set(Calendar.MONTH, Calendar.JANUARY);

			cal.set(Calendar.DAY_OF_MONTH, 1);

		}

		if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {

			cal.set(Calendar.MONTH, Calendar.APRIL);

			cal.set(Calendar.DAY_OF_MONTH, 1);

		}

		if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {

			cal.set(Calendar.MONTH, Calendar.JULY);

			cal.set(Calendar.DAY_OF_MONTH, 1);

		}

		if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {

			cal.set(Calendar.MONTH, Calendar.OCTOBER);

			cal.set(Calendar.DAY_OF_MONTH, 1);

		}

		return cal.getTime();

	}



	public Date getYesterday() {

		long time = this.fiducialDate.getTime() - 60 * 60 * 24 * 1000;

		return new Date(time);

	}

	

	public Date getTomorrow(){

		long time = this.fiducialDate.getTime() + 60 * 60 * 24 * 1000;

		return new Date(time);

	}



	/**

	 * 获取季度的最后一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDayOfQuarter(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.MONTH, offset * 3);



		int mon = cal.get(Calendar.MONTH);

		if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {

			cal.set(Calendar.MONTH, Calendar.MARCH);

			cal.set(Calendar.DAY_OF_MONTH, 31);

		}

		if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {

			cal.set(Calendar.MONTH, Calendar.JUNE);

			cal.set(Calendar.DAY_OF_MONTH, 30);

		}

		if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {

			cal.set(Calendar.MONTH, Calendar.SEPTEMBER);

			cal.set(Calendar.DAY_OF_MONTH, 30);

		}

		if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {

			cal.set(Calendar.MONTH, Calendar.DECEMBER);

			cal.set(Calendar.DAY_OF_MONTH, 31);

		}

		return cal.getTime();

	}



	/**

	 * 获取月的最后一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDayOfMonth(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.MONTH, offset);

		cal.set(Calendar.DAY_OF_MONTH, 1);

		return cal.getTime();

	}



	/**

	 * 获取月的最后一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDayOfMonth(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.MONTH, offset + 1);

		cal.set(Calendar.DAY_OF_MONTH, 1);

		cal.add(Calendar.DAY_OF_MONTH, -1);

		return cal.getTime();

	}



	/**

	 * 获取旬的第一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDayOfTendays(int offset) {

		cal.setTime(this.fiducialDate);

		int day = cal.get(Calendar.DAY_OF_MONTH);

		if (day >= 21) {

			day = 21;

		} else if (day >= 11) {

			day = 11;

		} else {

			day = 1;

		}



		if (offset > 0) {

			day = day + 10 * offset;

			int monOffset = day / 30;

			day = day % 30;

			cal.add(Calendar.MONTH, monOffset);

			cal.set(Calendar.DAY_OF_MONTH, day);

		} else {

			int monOffset = 10 * offset / 30;

			int dayOffset = 10 * offset % 30;

			if ((day + dayOffset) > 0) {

				day = day + dayOffset;

			} else {

				monOffset = monOffset - 1;

				day = day - dayOffset - 10;

			}

			cal.add(Calendar.MONTH, monOffset);

			cal.set(Calendar.DAY_OF_MONTH, day);

		}

		return cal.getTime();

	}



	/**

	 * 获取旬的最后一天

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDayOfTendays(int offset) {

		Date date = getFirstDayOfTendays(offset + 1);

		cal.setTime(date);

		cal.add(Calendar.DAY_OF_MONTH, -1);

		return cal.getTime();

	}



	/**

	 * 获取周的第一天(MONDAY)

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDayOfWeek(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.DAY_OF_MONTH, offset * 7);

		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

		return cal.getTime();

	}



	/**

	 * 获取周的最后一天(SUNDAY)

	 * 

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDayOfWeek(int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(Calendar.DAY_OF_MONTH, offset * 7);

		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

		cal.add(Calendar.DAY_OF_MONTH, 6);

		return cal.getTime();

	}



	/**

	 * 获取指定时间范围的第一天

	 * 

	 * @param dateRangeType

	 *            时间范围类型

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getFirstDate(int dateRangeType, int offset) {

		return null;

	}



	/**

	 * 获取指定时间范围的最后一天

	 * 

	 * @param dateRangeType

	 *            时间范围类型

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date getLastDate(int dateRangeType, int offset) {

		return null;

	}



	/**

	 * 根据日历的规则,为基准时间添加指定日历字段的时间量

	 * 

	 * @param field

	 *            日历字段, 使用Calendar类定义的日历字段常量

	 * @param offset

	 *            偏移量

	 * @return Date

	 */

	public Date add(int field, int offset) {

		cal.setTime(this.fiducialDate);

		cal.add(field, offset);

		return cal.getTime();

	}



	/**

	 * 根据日历的规则,为基准时间添加指定日历字段的单个时间单元

	 * 

	 * @param field

	 *            日历字段, 使用Calendar类定义的日历字段常量

	 * @param up

	 *            指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动

	 * @return Date

	 */

	public Date roll(int field, boolean up) {

		cal.setTime(this.fiducialDate);

		cal.roll(field, up);

		return cal.getTime();

	}



	/**

	 * 把字符串转换为日期

	 * 

	 * @param dateStr

	 *            日期字符串

	 * @param format

	 *            日期格式

	 * @return Date

	 */

	public static Date strToDate(String dateStr, String format) {

		Date date = null;



		if (dateStr != null && (!dateStr.equals(""))) {

			DateFormat df = new SimpleDateFormat(format);

			try {

				date = df.parse(dateStr);

			} catch (ParseException e) {

				e.printStackTrace();

			}

		}

		return date;

	}



	/**

	 * 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss

	 * 

	 * @param dateStr

	 *            日期字符串

	 * @return Date

	 */

	public static Date strToDate(String dateStr) {

		Date date = null;



		if (dateStr != null && (!dateStr.equals(""))) {

			if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {

				dateStr = dateStr + " 00:00";

			} else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}")) {

				dateStr = dateStr + ":00";

			} else {

				System.out.println(dateStr + " 格式不正确");

				return null;

			}

			DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss");

			try {

				date = df.parse(dateStr);

			} catch (ParseException e) {

				e.printStackTrace();

			}

		}

		return date;

	}



	/**

	 * 把日期转换为字符串

	 * 

	 * @param date

	 *            日期实例

	 * @param format

	 *            日期格式

	 * @return Date

	 */

	public static String dateToStr(Date date, String format) {

		return (date == null) ? "" : new SimpleDateFormat(format).format(date);

	}



	public static String dateToStr(Date date) {

		return (date == null) ? ""

				: new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);

	}



	/**

	 * 取得当前日期 年-月-日

	 * 

	 * @return Date

	 */

	public static String getCurrentDate() {

		DateFormat f = new SimpleDateFormat("yyyy-MM-dd");

		return f.format(Calendar.getInstance().getTime());

	}



	public static void main(String[] args) {

		DateUtils dateHelper = DateUtils.getInstance();



		/* Year */

		for (int i = -5; i <= 5; i++) {

			System.out.println("FirstDayOfYear(" + i + ") = "

					+ dateHelper.getFirstDayOfYear(i));

			System.out.println("LastDayOfYear(" + i + ") = "

					+ dateHelper.getLastDayOfYear(i));

		}



		/* Quarter */

		for (int i = -5; i <= 5; i++) {

			System.out.println("FirstDayOfQuarter(" + i + ") = "

					+ dateHelper.getFirstDayOfQuarter(i));

			System.out.println("LastDayOfQuarter(" + i + ") = "

					+ dateHelper.getLastDayOfQuarter(i));

		}



		/* Month */

		for (int i = -5; i <= 5; i++) {

			System.out.println("FirstDayOfMonth(" + i + ") = "

					+ dateHelper.getFirstDayOfMonth(i));

			System.out.println("LastDayOfMonth(" + i + ") = "

					+ dateHelper.getLastDayOfMonth(i));

		}



		/* Week */

		for (int i = -5; i <= 5; i++) {

			System.out.println("FirstDayOfWeek(" + i + ") = "

					+ dateHelper.getFirstDayOfWeek(i));

			System.out.println("LastDayOfWeek(" + i + ") = "

					+ dateHelper.getLastDayOfWeek(i));

		}



		/* Tendays */

		for (int i = -5; i <= 5; i++) {

			System.out.println("FirstDayOfTendays(" + i + ") = "

					+ dateHelper.getFirstDayOfTendays(i));

			System.out.println("LastDayOfTendays(" + i + ") = "

					+ dateHelper.getLastDayOfTendays(i));

		}

	}



	/**

	 * 取当前日期的字符串形式,"XXXX年XX月XX日"

	 * 

	 * @return java.lang.String

	 */

	public static String getPrintDate() {

		String printDate = "";

		Calendar calendar = Calendar.getInstance();

		calendar.setTime(new Date());

		printDate += calendar.get(Calendar.YEAR) + "年";

		printDate += (calendar.get(Calendar.MONTH) + 1) + "月";

		printDate += calendar.get(Calendar.DATE) + "日";

		return printDate;

	}



	/**

	 * 将指定的日期字符串转化为日期对象

	 * 

	 * @param dateStr

	 *            日期字符串

	 * @return java.util.Date

	 */

	public static Date getDate(String dateStr, String format) {

		if (dateStr == null) {

			return new Date();

		}

		if (format == null) {

			format = "yyyy-MM-dd";

		}

		SimpleDateFormat sdf = new SimpleDateFormat(format);

		try {

			Date date = sdf.parse(dateStr);

			return date;

		} catch (Exception e) {

			return null;

		}

	}



	/**

	 * 从指定Timestamp中得到相应的日期的字符串形式 日期"XXXX-XX-XX"

	 * 

	 * @param dateTime

	 * @return 、String

	 */

	public static String getDateFromDateTime(Timestamp dateTime) {

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		return sdf.format(dateTime).toString();

	}



	/**

	 * 得到当前时间 return java.sql.Timestamp

	 * 

	 * @return Timestamp

	 */

	public static Timestamp getNowTimestamp() {

		long curTime = System.currentTimeMillis();

		return new Timestamp(curTime);

	}

}

  

你可能感兴趣的:(java)