常用Date日期方法

<pre name="code" class="java">package com.util;

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

public class CalendarUtil {
/** 缺省日期格式 */
	public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
	/** 缺省時間格式 */
	public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";


	/** 缺省月格式 */
	public static final String DEFAULT_MONTH = "MONTH";


	/** 缺省年格式 */
	public static final String DEFAULT_YEAR = "YEAR";


	/** 缺省日格式 */
	public static final String DEFAULT_DATE = "DAY";


	/** 缺省長日期格式 */
	public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH-mm";


	/** 缺省長日期格式,精確到秒 */
	public static final String DEFAULT_DATETIME_FORMAT_SEC = "yyyy-MM-dd HH:mm:ss";


	/**
	 * 取當前日期
	 * 
	 * @return 當前日期的字符串 ,如2002-12-12
	 **/
	public static String today() {
		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				DEFAULT_DATE_FORMAT);
		java.util.Date currentTime_1 = SystemUtil.getCurDate();
		String dateString = formatter.format(currentTime_1);
		return dateString;
	}


	public static String today(String strFormat) {
		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				strFormat);
		java.util.Date currentTime_1 = SystemUtil.getCurDate();
		String dateString = formatter.format(currentTime_1);
		return dateString;
	}


	/**
	 * 取當前時間,
	 * 
	 * @return 當前時間,如:21:10:12
	 **/
	public static String time() {
		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				DEFAULT_TIME_FORMAT);
		java.util.Date currentTime_1 = SystemUtil.getCurDate();
		String dateString = formatter.format(currentTime_1);
		return dateString;
	}


	/**
	 * 取當前時間,規定格式 'hh:mm:ss'
	 * 
	 * @return 當前時間,如:21:10:12
	 **/


	public static String time(String strFormat) {
		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				strFormat);
		java.util.Date currentTime_1 = SystemUtil.getCurDate();
		String dateString = formatter.format(currentTime_1);
		return dateString;
	}


	/**
	 * 取得相對於當前時間增加天數/月數/年數後的日期 <br>
	 * 欲取得當前日期5天前的日期,可做如下調用:<br>
	 * getAddDay("DATE", -5).
	 * 
	 * @param field
	 *            ,段,如"year","month","date",對大小寫不敏感
	 * 
	 * @param amount
	 *            ,增加的數量(減少用負數表示),如5,-1
	 * @return 格式化後的字符串 如"2000-02-01"
	 **/


	public static String getAddDay(String field, int amount) {
		// 當前日期和前一天


		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				DEFAULT_DATETIME_FORMAT_SEC);


		Calendar rightNow = Calendar.getInstance();
		Date dt = SystemUtil.getCurDate();
		rightNow.setTime(dt);


		int intField = 0;
		String tmpField = field.toUpperCase();


		intField = Calendar.DATE;
		if (tmpField.equals(DEFAULT_YEAR))
			intField = Calendar.YEAR;
		if (tmpField.equals(DEFAULT_MONTH))
			intField = Calendar.MONTH;
		if (tmpField.equals(DEFAULT_DATE))
			intField = Calendar.DATE;


		rightNow.add(intField, amount);
		String day = formatter.format(rightNow.getTime());
		return day;
	}


	/**
	 * 取得相對於當前時間增加天數/月數/年數後的日期,按指定格式輸出
	 * 
	 * 
	 * 欲取得當前日期5天前的日期,可做如下調用:<br>
	 * getAddDay("DATE", -5,'yyyy-mm-dd hh:mm').
	 * 
	 * @param field
	 *            ,段,如"year","month","date",對大小寫不敏感
	 * 
	 * @param amount
	 *            ,增加的數量(減少用負數表示),如5,-1
	 * @param strFormat
	 *            ,輸出格式,如"yyyy-mm-dd","yyyy-mm-dd hh:mm"
	 * @return 格式化後的字符串 如"2000-02-01 hh:mm:ss"
	 **/
	public static String getAddDay(String field, int amount, String strFormat) {
		// 當前日期和前一天


		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				strFormat);


		Calendar rightNow = Calendar.getInstance();
		Date dt = SystemUtil.getCurDate();
		rightNow.setTime(dt);


		int intField = 0;
		String tmpField = field.toUpperCase();


		intField = Calendar.DATE;
		if (tmpField.equals(DEFAULT_YEAR))
			intField = Calendar.YEAR;
		if (tmpField.equals(DEFAULT_MONTH))
			intField = Calendar.MONTH;
		if (tmpField.equals(DEFAULT_DATE))
			intField = Calendar.DATE;


		rightNow.add(intField, amount);
		String day = formatter.format(rightNow.getTime());
		return day;
	}


	/**
	 * 獲取辦理期限,過濾節假日
	 * 
	 * @param days
	 *            提交的天數
	 * 
	 * @param flags
	 *            設定的節假日列表
	 * @return 實際的辦理期限
	 */
	public static String getDistDay(int days, String[] flags) {
		int tempday = days;
		int count = 0;
		for (int i = 0; i < flags.length; i++) {
			if (flags[i].equals("1")) {
				count += 1;
			}
			if (count == days) {
				tempday = i;
				break;
			}
		}
		return getAddDay(DEFAULT_DATE, tempday, DEFAULT_DATE_FORMAT);
	}


	/**
	 * 功能:對於給定的時間增加天數/月數/年數後的日期,按指定格式輸出
	 * 
	 * 
	 * @param date
	 *            String 要改變的日期
	 * @param field
	 *            int 日期改變的字段,YEAR,MONTH,DAY
	 * @param amount
	 *            int 改變量
	 * 
	 * @param strFormat
	 *            日期返回格式
	 * @return
	 * @throws ParseException
	 * @author
	 */
	public static String getAddDay(String date, String field, int amount,
			String strFormat) {
		try {
			// 當前日期和前一天
			java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
					strFormat);


			Calendar rightNow = Calendar.getInstance();
			Date tempdate = formatter.parse(date);
			rightNow.setTime(tempdate);


			int intField = 0;
			String tmpField = field.toUpperCase();


			intField = Calendar.DATE;
			if (tmpField.equals(DEFAULT_YEAR))
				intField = Calendar.YEAR;
			if (tmpField.equals(DEFAULT_MONTH))
				intField = Calendar.MONTH;
			if (tmpField.equals(DEFAULT_DATE))
				intField = Calendar.DATE;


			rightNow.add(intField, amount);
			String day = formatter.format(rightNow.getTime());
			return day;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return "";
	}


	/**
	 * 功能:對於給定的時間增加天數/月數/年數後的日期,按指定格式輸出
	 * 
	 * 
	 * 
	 * @param date
	 *            String 要改變的日期
	 * @param field
	 *            int 日期改變的字段,YEAR,MONTH,DAY
	 * @param amount
	 *            int 改變量
	 * 
	 * 
	 * @param strFormat
	 *            日期返回格式
	 * @return
	 * @throws ParseException
	 */
	public static String getAddDay(Date date, String field, int amount,
			String strFormat) {
		// 當前日期和前一天


		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				strFormat);


		Calendar rightNow = Calendar.getInstance();
		Date tempdate = date;
		rightNow.setTime(tempdate);


		int intField = 0;
		String tmpField = field.toUpperCase();


		intField = Calendar.DATE;
		if (tmpField.equals(DEFAULT_YEAR))
			intField = Calendar.YEAR;
		if (tmpField.equals(DEFAULT_MONTH))
			intField = Calendar.MONTH;
		if (tmpField.equals(DEFAULT_DATE))
			intField = Calendar.DATE;


		rightNow.add(intField, amount);
		String day = formatter.format(rightNow.getTime());
		return day;
	}


	/**
	 * Timestamp按照指定格式轉爲字符串
	 * 
	 * @param ts
	 *            源對象
	 * 
	 * @param sFormat
	 *            ps(如yyyy.mm.dd)
	 * 
	 * @return 如:2003-01-01 或2003-01-01 13:21
	 */
	public static String toString(Timestamp ts, String sFormat) {
		if (ts == null) {
			return "";
		}
		java.util.Date d = new java.util.Date(ts.getTime());
		return toString(d, sFormat);
	}


	/**
	 * Timestamp按照缺省格式轉爲字符串
	 * 
	 * @param ts
	 *            源對象
	 * 
	 * @return 如:2003-01-01
	 */
	public static String toString(Timestamp ts) {
		return toString(ts, DEFAULT_DATE_FORMAT);
	}


	/**
	 * Timestamp按照缺省格式轉爲字符串,可指定是否使用長格式
	 * 
	 * @param ts
	 *            欲轉化之變量Timestamp
	 * @param fullFormat
	 *            是否使用長格式
	 * 
	 * @return 如:2003-01-01 或2003-01-01 13:21
	 */
	public static String toString(Timestamp ts, boolean fullFormat) {
		String s = null;
		if (fullFormat) {
			s = DEFAULT_DATETIME_FORMAT_SEC;
		} else {
			s = DEFAULT_DATE_FORMAT;
		}


		return toString(ts, s);
	}


	/**
	 * 將sqldate型按照指定格式轉爲字符串
	 * 
	 * @param sqldate
	 *            源對象
	 * 
	 * @param sFormat
	 *            ps
	 * @return 如:2003-01-01 或2003-01-01 00:00
	 */
	public static String toString(java.sql.Date sqldate, String sFormat) {
		if (sqldate == null) {
			return "";
		}
		java.util.Date d = new java.util.Date(sqldate.getTime());
		return toString(d, sFormat);
	}


	/**
	 * 將sqldate型按照缺省格式轉爲字符串
	 * 
	 * @param sqldate
	 *            源對象
	 * 
	 * @return 如:2003-01-01
	 */
	public static String toString(java.sql.Date sqldate) {
		return toString(sqldate, DEFAULT_DATE_FORMAT);
	}


	/**
	 * 將java.util.date型按照指定格式轉爲字符串
	 * 
	 * @param d
	 *            源對象
	 * 
	 * @param sFormat
	 *            ps
	 * @return 如:2003-01-01
	 */
	public static String toString(java.util.Date d, String sFormat) {
		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(
				sFormat);
		String dateString = formatter.format(d);
		return dateString;
	}


	/**
	 * 將java.util.date型按照缺省格式轉爲字符串
	 * 
	 * @param d
	 *            源對象
	 * 
	 * @return 如:2003-01-01
	 */
	public static String toString(java.util.Date d) {
		return toString(d, DEFAULT_DATE_FORMAT);
	}


	/**
	 * 強制類型轉換 從串到日期
	 * 
	 * @param sDate
	 *            源字符串,採用yyyy-MM-dd格式
	 * @param sFormat
	 *            ps
	 * @return 得到的日期對象
	 * 
	 * @throws ParseException
	 */
	public static java.util.Date parseDate(String sDate, String sFormat) {
		java.text.SimpleDateFormat formatter = null;


		java.util.Date utildate = null;
		try {
			formatter = new java.text.SimpleDateFormat(sFormat);
			utildate = formatter.parse(sDate);
		} catch (ParseException e) {
			utildate = new Date();
		}


		return utildate;
	}


	/**
	 * 強制類型轉換 從串到時間戳
	 * 
	 * @param sDate
	 *            源串
	 * @param sFormat
	 *            遵循格式
	 * @return 取得的時間戳對象
	 * @throws ParseException
	 */
	public static Timestamp parseTimestamp(String sDate, String sFormat) {
		try {
			java.text.SimpleDateFormat formatter = null;
			java.util.Date utildate = null;
			formatter = new java.text.SimpleDateFormat(sFormat);
			utildate = formatter.parse(sDate);
			java.sql.Timestamp tsdate = new java.sql.Timestamp(
					utildate.getTime());
			return tsdate;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}


	/**
	 * getCurDate 取當前日期
	 * 
	 * @return java.util.Date型日期
	 **/
	public static java.util.Date getCurDate() {
		return (new java.util.Date());
	}


	/**
	 * getCurTimestamp 取當前時間戳
	 * 
	 * @return java.sql.Timestamp
	 **/
	public static java.sql.Timestamp getCurTimestamp() {
		java.util.Date today = new java.util.Date();
		java.sql.Timestamp ts = new java.sql.Timestamp(today.getTime());
		return ts;
	}


	/**
	 * getCurTimestamp 取遵循格式的當前時間
	 * 
	 * @param sFormat
	 *            遵循格式
	 * @return java.sql.Timestamp
	 **/
	public static Date getCurDate(String format) {
		try {
			SimpleDateFormat formatter = new SimpleDateFormat(format);
			String strCurDate = toString(new Date(), format);
			Date date = formatter.parse(strCurDate);
			return date;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new Date();
	}


	/**
	 * 返回:20100910210637578
	 */
	public static String formate(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS%1$tL", date);
	}


	/**
	 * 返回:2010-09-10 21:08:17
	 */
	public static String formateYMDHMS(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", date);
	}


	/**
	 * 返回:2010-09-10
	 */
	public static String formateYMD(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tY-%1$tm-%1$td", date);
	}


	/**
	 * 返回:2010年09月10日
	 */
	public static String formateYMD_CN(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tY年%1$tm月%1$td日", date);
	}


	/**
	 * 返回:09-10
	 */
	public static String formateMD(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tm-%1$td", date);
	}


	/**
	 * 返回:09月10日
	 */
	public static String formateMD_CN(Date date) {
		if (date == null) {
			return "";
		}
		return String.format("%1$tm月%1$td日", date);
	}


	/**
	 * 獲取23:59:59時間點
	 * 
	 * @param Date
	 * @return Date 年月日不變,時分秒改爲當天的23:59:59
	 */
	public static Date getEndTime(Date date) {
		if (null == date) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		return calendar.getTime();
	}


	/**
	 * 返回指定格式的日期字符串
	 * 
	 * @Description: TODO
	 * @param date
	 * @param pattern
	 * @return
	 * @author yuanjin
	 * @date 2013-12-24 上午10:12:35
	 * @return String
	 */
	public static String dateToString(Date date, String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}


	public static Date getStringToDate(String format) throws Exception {
		if (null == format || "".equals(format)) {
			return null;
		}
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		Date date = formatter.parse(format);
		return date;


	}


	// 當前日期減n天后的日期,
	public static Date beforeNowDate(int n) {
		Calendar rightNow = Calendar.getInstance();
		rightNow.add(Calendar.DAY_OF_MONTH, -n);
		return rightNow.getTime();
	}


	public static boolean isActiveTime(Date lastDate) {
		Date nowDate = new Date();// 當前時間\r
		long nowTime = nowDate.getTime();
		long lastTime = lastDate.getTime();// 以前的時間\r
		long time = nowTime - lastTime;// 時間相減比較。
		long temp = time / (1000 * 60);
		if (temp < (48 * 60))
			return true;
		else
			return false;
	}


	/**
	 * 獲取00:00:00時間點
	 * 
	 * @param Date
	 * @return Date 年月日不變,時分秒改爲當天的00:00:00
	 */
	public static Date getBeginTime(Date date) {
		if (null == date) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
	}
	
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章