java中關於時間的一些常規操作

package test2;

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

/********************
 * 時間工具類
 * 1.將String類型的時間轉化爲Date類型
 * 2.將Date類型的時間轉化爲String類型
 * 3.獲取當前系統時間格式化字符串
 * 4.獲取當前時間戳
 * 5.判斷傳入的Date類型時間是否在當前系統時間之前
 * 6.判斷傳入的Date類型時間是否在當前系統時間之後
 * 7.判斷傳入的Date類型時間是否和當前系統時間相等
 * 8. 獲取兩個時間間隔的天數
 * 9.得到一個時間延後多少天之後的時間
 * 10.判斷是否潤年
 * 11.獲取某個月的最後一天
 * 12.判斷兩個日期是否在同一周
 * 13.根據一個日期,返回是星期幾的字符串
 * @author Shenfd
 *
 */
public class DateUtil {
	
	private DateUtil(){
		
	}
	
	static final String format1 = "yyyy-MM-dd HH:mm:ss";
	static final String format2 = "yyyy-MM-dd HH:mm:ss:SS";
	static final String format3 = "yyyy/MM/dd HH:mm:ss";
	static final String format4 = "yyyy/MM/dd HH:mm:ss:SS";
	static final String format5 = "yyyy年MM月dd日 HH時mm分ss秒";
	static final String format6 = "yyyy年MM月dd日 HH時mm分ss秒SS毫秒";
	static final String format7 = "yyyy-MM-dd";
	static final String format8 = "yyyy年MM月dd日";
	static final String format9 = "yyyyMMddHHmmssSS";
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,格式[yyyy-MM-dd HH:mm:ss]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate1(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format1);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,格式[yyyy-MM-dd HH:mm:ss:SS],參數精確到毫秒
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate2(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format2);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,日期有斜/,格式[yyyy/MM/dd HH:mm:ss]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate3(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format3);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,日期有斜/,格式[yyyy/MM/dd HH:mm:ss:SS],參數要精確到毫秒
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate4(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format4);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
 
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,日期有斜/,格式[yyyy年MM月dd日 HH24時mm分ss秒]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate5(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format5);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,日期有斜/,格式[yyyy年MM月dd日 HH24時mm分ss秒SS毫秒]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate6(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format6);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,格式[yyyy-MM-dd]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate7(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format7);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************************
	 * 將String時間轉化爲Date類型
	 * @param stringTime 
	 * 參數爲String類型時間,格式[yyyy年MM月dd日]
	 * @return Date類型時間
	 * @throws ParseException 
	 */
	public static Date stringParseToDate8(String stringTime) throws ParseException{
		DateFormat df = new SimpleDateFormat(format7);
		Date date = null;
		date = df.parse(stringTime);
		return date;
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,格式[yyyy-MM-dd HH:mm:ss]
	 */
	public static String getCurrentDateString1(){
		return new SimpleDateFormat(format1).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,精確到毫秒,格式[yyyy-MM-dd HH:mm:ss:SS]
	 */
	public static String getCurrentDateString2(){
		return new SimpleDateFormat(format2).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間,日期加斜/
	 * @return String類型時間,格式[yyyy/MM/dd HH:mm:ss]
	 */
	public static String getCurrentDateString3(){
		return new SimpleDateFormat(format3).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間,精確到毫秒,日期加斜/
	 * @return String類型時間,格式[yyyy/MM/dd HH:mm:ss:SS]
	 */
	public static String getCurrentDateString4(){
		return new SimpleDateFormat(format4).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,格式[yyyy年MM月dd日 HH時mm分ss秒]
	 */
	public static String getCurrentDateString5(){
		return new SimpleDateFormat(format5).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,精確到毫秒,格式[yyyy年MM月dd日 HH時mm分ss秒SS毫秒]
	 */
	public static String getCurrentDateString6(){
		return new SimpleDateFormat(format6).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,精確到毫秒,格式[yyyy-MM-dd]
	 */
	public static String getCurrentDateString7(){
		return new SimpleDateFormat(format7).format(new Date());
	}
	
	/*******************
	 * 獲取當前系統時間
	 * @return String類型時間,精確到毫秒,格式[yyyy年MM月dd日]
	 */
	public static String getCurrentDateString8(){
		return new SimpleDateFormat(format8).format(new Date());
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy-MM-dd HH:mm:ss]
	 */
	public static String dateParseToString1(Date date){
		DateFormat df = new SimpleDateFormat(format1);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy-MM-dd HH:mm:ss:SS]
	 */
	public static String dateParseToString2(Date date){
		DateFormat df = new SimpleDateFormat(format2);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy/MM/dd HH:mm:ss]
	 */
	public static String dateParseToString3(Date date){
		DateFormat df = new SimpleDateFormat(format3);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy/MM/dd HH:mm:ss:SS]
	 */
	public static String dateParseToString4(Date date){
		DateFormat df = new SimpleDateFormat(format4);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy年MM月dd日 HH時mm分ss秒]
	 */
	public static String dateParseToString5(Date date){
		DateFormat df = new SimpleDateFormat(format5);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy年MM月dd日 HH時mm分ss秒SS毫秒]
	 */
	public static String dateParseToString6(Date date){
		DateFormat df = new SimpleDateFormat(format6);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy-MM-dd]
	 */
	public static String dateParseToString7(Date date){
		DateFormat df = new SimpleDateFormat(format7);
		return df.format(date);
	}
	
	/****************************
	 * 將Date類型日期格式化爲String類型
	 * @param date 參數爲Date類型
	 * @return 返回String類型時間,格式[yyyy年MM月dd日]
	 */
	public static String dateParseToString8(Date date){
		DateFormat df = new SimpleDateFormat(format8);
		return df.format(date);
	}
	
	/***********************
	 * 獲取當前時間戳 格式yyyyMMddHHmmssSS
	 * @return String類型時間戳
	 */
	public static String getTimeStampString(){
		return new SimpleDateFormat(format9).format(new Date());
	}
	
	/*************************
	 * 判斷傳入的Date類型時間是否在當前系統時間之前
	 * @param date 和當前系統時間比較的時間
	 * @return bollean
	 */
	public static boolean isBoforeCurrentDate(Date date){
		return (date.getTime()<(new Date().getTime())) ? true:false;
	}
	
	/*************************
	 * 判斷傳入的Date類型時間是否在當前系統時間之後
	 * @param date 和當前系統時間比較的時間
	 * @return boolean
	 */
	public static boolean isAfterCurrentDate(Date date){
		return (date.getTime()>(new Date().getTime())) ? true:false;
	}
	
	/*************************
	 * 判斷傳入的Date類型時間是否和當前系統時間相等
	 * @param date 和當前系統時間比較的時間
	 * @return boolean
	 */
	public static boolean isEqualsCurrentDate(Date date){
		return (date.getTime()==(new Date().getTime())) ? true:false;
	}
	
	/*************************
	 * 獲取兩個時間間隔的天數,如果返回值大於0,則表示startDate>endDate
	 * @param startDate Date類型
	 * @param endDate Date類型
	 * @return 間隔天數
	 */
	public static int getSeparateDay(Date startDate,Date endDate){
		return (int) ((startDate.getTime()-endDate.getTime())/(24 * 60 * 60 * 1000));
	}
	
	/*************************
	 * 獲取兩個時間間隔的天數,如果返回值大於0,則表示startDate>endDate
	 * @param startDate String類型
	 * @param endDate String類型
	 * @return 間隔天數
	 * @throws ParseException 
	 */
	public static int getSeparateDay(String startDate, String endDate) throws ParseException{
		DateFormat df = new SimpleDateFormat(format7);
		return (int) ((df.parse(startDate).getTime()-df.parse(endDate).getTime())/(24 * 60 * 60 * 1000));
	}
	
	/****************************
	 * 得到一個時間延後多少天之後的時間
	 * @param nowDay String類型的時間
	 * @param delay 前移或後延的天數
	 * @return 返回String類型時間
	 * @throws ParseException
	 */
	public static String getMoveDay(String nowDay, int delay) throws ParseException{
		DateFormat df = new SimpleDateFormat(format7);
		Date d = stringParseToDate7(nowDay);
		long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
		d.setTime(myTime * 1000);
		return df.format(d);
	}
	
	/****************************
	 * 得到當前時間延後多少天之後的時間
	 * @param nowDay String類型的時間
	 * @param delay 前移或後延的天數
	 * @return 返回Date類型時間
	 * @throws ParseException
	 */
	public static Date getMoveDay(int delay) throws ParseException{
		DateFormat df = new SimpleDateFormat(format7);
		Date d = new Date();
		long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
		d.setTime(myTime * 1000);
		return df.parse(df.format(d));
	}
	
	
	/*********************
	 * 判斷是否潤年
	 * @param date Date類型時間
	 * @return boolean
	 */
	public static boolean isLeapYear(Date date) {
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(date);
		int year = gc.get(Calendar.YEAR);
		if ((year % 400) == 0)
			return true;
		else if ((year % 4) == 0) {
			if ((year % 100) == 0)
				return false;
			else
				return true;
		} else
			return false;
	}
	
	/*********************
	 * 判斷是否潤年
	 * @param date String類型時間
	 * @return boolean
	 * @throws ParseException 
	 */
	public static boolean isLeapYear(String date) throws ParseException {
		DateFormat df = new SimpleDateFormat(format7);
		Date d = df.parse(date);
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(d);
		int year = gc.get(Calendar.YEAR);
		if ((year % 400) == 0)
			return true;
		else if ((year % 4) == 0) {
			if ((year % 100) == 0)
				return false;
			else
				return true;
		} else
			return false;
	}
	
	/***********************
	 * 獲取某個月的最後一天
	 * @param date String類型的時間
	 * @return String日期,返回格式:[yyyy-MM-dd]
	 * @throws ParseException
	 */
	public static String getEndDateOfMonth(String date) throws ParseException {// yyyy-MM-dd
		String str = date.substring(0, 8);
		String month = date.substring(5, 7);
		int mon = Integer.parseInt(month);
		if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
			str += "31";
		} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
			str += "30";
		} else {
			if (isLeapYear(date)) {
				str += "29";
			} else {
				str += "28";
			}
		}
		return str;
	}
	
	/*******************
	 * 判斷兩個日期是否在同一周
	 * @param date1 Date類型的時間
	 * @param date2 Date類型的時間
	 * @return boolean
	 */
	public static boolean isSameWeekDates(Date date1, Date date2) {
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(date1);
		cal2.setTime(date2);
		int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
		if (0 == subYear) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
			// 如果12月的最後一週橫跨來年第一週的話則最後一週即算做來年的第一週
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
				return true;
		}
		return false;
	}
	
	
	/**************
	 * 根據一個日期,返回是星期幾的字符串
	 * @param date Date類型的日期
	 * @return
	 */
	public static String getWeekStr(Date date){
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		String str=new SimpleDateFormat("EEEE").format(c.getTime());
		if("1".equals(str)){
			str = "星期日";
		}else if("2".equals(str)){
			str = "星期一";
		}else if("3".equals(str)){
			str = "星期二";
		}else if("4".equals(str)){
			str = "星期三";
		}else if("5".equals(str)){
			str = "星期四";
		}else if("6".equals(str)){
			str = "星期五";
		}else if("7".equals(str)){
			str = "星期六";
		}
		return str;
	}
}


最後,歡迎訪問風格清新簡潔的輕博客網站[指尖一刻]



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