良い時間処理クラス

10339 ワード

package org.uintec.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *       。
 * <p>
 *            org.apache.commons.lang.time.DateFormatUtils
 * 
 * @since 1.0.0
 */

public class DateUtil {

	/** YYY   */
	public static final String FORMAT_DATE_YEAR = "yyyy";

	/** YYYY-MM    */
	public static final String FORMAT_DATE_YEAR_MONTH = "yyyy-MM";

	/** YYYY-MM-dd    */
	public static final String FORMAT_DATE = "yyyy-MM-dd";

	/**      */
	public static final String FORMAT_TIME = "HH:mm:ss";

	/**          */
	public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss";

	/**    */
	private static Logger logger = LoggerFactory.getLogger(DateUtil.class);

	/**
	 *           
	 * 
	 * @param date
	 *            java.util.Date  
	 * @param format
	 *               null "",   DATE  
	 * @return          null
	 */
	public static String date2String(java.util.Date date, String format) {
		String result = null;
		if (date == null) {
			return result;
		}
		if (StringUtils.isEmpty(format)) {
			format = FORMAT_DATE;
		}
		try {
			result = DateFormatUtils.format(date, format);
		} catch (Exception ex) {
			logger.warn("          ,  :" + date.toString() + ",   :" + format);
		}

		return result;
	}

	/**
	 *            
	 * 
	 * @param str
	 *                    
	 * @param format
	 *                   ,     Blank             
	 * @return            null
	 */
	public static java.util.Date string2Date(String str, String format) {
		if (StringUtils.isEmpty(str)) {
			return null;
		}
		Date result = null;
		String[] formats = null;
		if (StringUtils.isEmpty(format)) {
			formats = new String[3];
			formats[0] = FORMAT_DATETIME;
			formats[1] = FORMAT_DATE;
			formats[2] = FORMAT_TIME;
		} else {
			formats = new String[4];
			formats[0] = format;
			formats[1] = FORMAT_DATETIME;
			formats[2] = FORMAT_DATE;
			formats[3] = FORMAT_TIME;
		}
		try {
			result = DateUtils.parseDate(str, formats);
		} catch (Exception ex) {
			logger.warn("          ,       :" + str + ",   :" + format);

		}

		return result;
	}

	/**
	 *        sql    
	 * 
	 * @param str
	 *                    
	 * @param format
	 *                   ,     Blank             
	 * @return            null
	 */
	public static java.sql.Date string2SqlDate(String str, String format) {
		return new java.sql.Date(string2Date(str, format).getTime());
	}

	/**
	 *             
	 * 
	 * @param ts
	 *               
	 * @param format
	 *                  
	 * @return        
	 */
	public static String timestamp2String(Timestamp ts, String format) {
		return ts == null ? null : date2String(
				new java.util.Date(ts.getTime()), format);
	}

	/**
	 *             
	 * 
	 * @param str
	 *                    
	 * @param format
	 *                   ,     Blank             
	 * @return            null
	 * @throws Exception
	 */
	public static Timestamp string2Timestamp(String str, String format) {
		return string2Date(str, format) == null ? null : new Timestamp(
				string2Date(str, format).getTime());
	}

	/**
	 *    。
	 * 
	 * @param date
	 *              
	 * @param num
	 *                 
	 * @return       
	 */
	public static java.util.Date addYears(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, num);
		return cal.getTime();
	}

	/**
	 *     。
	 * 
	 * @param date
	 *              
	 * @param num
	 *                 
	 * @return       
	 */
	public static java.util.Date addMonths(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, num);
		return cal.getTime();
	}

	/**
	 *     。
	 * 
	 * @param date
	 *              
	 * @param num
	 *                 
	 * @return       
	 */
	public static java.util.Date addDays(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_YEAR, num);
		return cal.getTime();
	}
	
	/**
	 *     。
	 * @param date   
	 * @param num       
	 * @return       
	 */
	public static java.util.Date addHours(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.HOUR_OF_DAY, num);
		return cal.getTime();
	}
	
	/**
	 *     
	 * @param date   
	 * @param num       
	 * @return       
	 */
	public static java.util.Date addMinutes(java.util.Date date, int num) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MINUTE, num);
		return cal.getTime();
	}

	/**
	 *             。
	 * 
	 * @param date
	 *              
	 * @return           
	 */
	public static java.util.Date getFirstDateOfYear(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_YEAR, cal
				.getActualMinimum(Calendar.DAY_OF_YEAR));
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}

	/**
	 *             。
	 * 
	 * @param date
	 *              
	 * @return           
	 */
	public static java.util.Date getFirstDateOfMonth(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMinimum(Calendar.DAY_OF_MONTH));
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}

	/**
	 *              。
	 * 
	 * @param date
	 *              
	 * @return           
	 */
	public static java.util.Date getLastDateOfYear(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_YEAR, cal
				.getActualMaximum(Calendar.DAY_OF_YEAR));
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

	/**
	 *              。
	 * 
	 * @param date
	 *              
	 * @return           
	 */
	public static java.util.Date getLastDateOfMonth(java.util.Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, cal
				.getActualMaximum(Calendar.DAY_OF_MONTH));
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

	/**
	 *              , :   ,   ……
	 * 
	 * @param date
	 *              
	 * @return   *
	 */
	public static String getStringDayOfWeek(Date date) {
		String result = "";
		if (null != date) {
			SimpleDateFormat formatter4 = new SimpleDateFormat("E");
			result = formatter4.format(date);
		}
		return result;
	}

	/**
	 *          
	 * 
	 * @param date
	 *              
	 * @return 1 d1  d2 0 d1  d2 -1 d1  d2
	 */
	public static int compareDate(Date d1, Date d2) {
		return d1.getTime() > d2.getTime() ? 1
				: (d1.getTime() < d2.getTime() ? -1 : 0);
	}

	/**
	 *      ,            
	 * 
	 * @param day1
	 * @param day2
	 * @return -1 day1 day2   0 day1,day2     1 day1 day2  
	 */
	public static int compareDay(int day1, int day2) {
		if (day1 == day2) {
			return 0;
		}
		if (Math.abs(day1 - day2) > 15) {
			if (day1 > day2) {
				return -1;
			} else {
				return 1;
			}
		} else if (day1 < day2) {
			return -1;
		} else {
			return 1;
		}
	}

	/**
	 *      ,            
	 * 
	 * @param day1
	 * 
	 * @param day2
	 * 
	 * @return -2 day1day2 -1 day1day2 0 day1,day2 1 day1day2
	 */
	public static int compareDay2(int day1, int day2) {
		if (day1 == day2) {
			return 0;
		}
		int yesday = Integer.parseInt(DateUtil.date2String(DateUtil.addDays(
				new Date(), -1), "dd"));
		if (Math.abs(day1 - day2) > 15) {
			if (day1 > day2) {
				if (day1 == yesday) {
					return -1;
				} else {
					return -2;
				}
			} else {
				return 1;
			}
		} else if (day1 < day2) {
			if (day1 == yesday) {
				return -1;
			} else {
				return -2;
			}
		} else {
			return 1;
		}
	}

	public static void main(String[] args) {
		Date date = new Date();
		int result = DateUtil.compareDay(31, 1);
//		System.out.println(result);
	}
}