package com.cloudcross.ssp.common.utils;

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

import org.apache.commons.lang.StringUtils;

public final class DateUtil {
	private DateUtil(){}
	/**
	 * 定义常用的日期格式化对象。
	 */
	public static interface DateFmts {
		
		/**
		 * “年月日”格式。
		 * <p>
		 * 例：20110410
		 */
		String YYYYMMDD = "yyyyMMdd";
		
		/**
		 * “年月日”格式。
		 * <p>
		 * 例：2011041011
		 */
		String YYYY_M_MDD_HH = "yyyyMMddHH";
		
		/**
		 * “年-月-日”格式
		 * <p>
		 * 例：2011-04-10
		 */
		String YYYY_MM_DD = "yyyy-MM-dd";

		/**
		 * “年/月/日”格式
		 * <p>
		 * 例：2011/04/10
		 */
		String YYYY_MM_DD_SLASH = "yyyy/MM/dd";
		
		/**
		 * “年-月-日　时：分：秒”
		 * <p>
		 * 例：2011-04-10 18:11:39
		 */
		String YYYY_MM_DD_HHMMSS = "yyyy-MM-dd HH:mm:ss";
		
		/**
		 * “年-月-日　时：分”
		 * <p>
		 * 例：2011-04-10 18:11
		 */
		String YYYY_MM_DD_HHMM = "yyyy-MM-dd HH:mm";
		
		/**
		 * “年-月-日 （星期）　时：分：秒”
		 * <p>
		 * 例：2011-04-10 (星期日) 18:11:58
		 */
		String YYYY_MM_DD_EEE_HHMMSS = "yyyy-MM-dd '('EEE')' HH:mm:ss";
		
		/**
		 * “时间段　时：分”
		 * <p>
		 * 例：下午 18:12
		 */
		String a_HHMM = "a HH:mm";

	}
	
	/**
	 * 返回当前日期指定<code>dateFormat</code>的字符串。
	 * <p>
	 * 例如：<br>
	 * <li>getDate(DateFmts.YYYYMMDD, today) = "20110408"</li>
	 * 
	 * @param dateFormat
	 *            日期格式串。
	 * @return 格式化后的日期串
	 * @see DateFmts
	 */
	public static String getDate(String dateFormatStr, Date date) {
		if (StringUtils.isBlank(dateFormatStr) || date == null) {
			return StringUtils.EMPTY;
		} else {
			DateFormat dateFormat = new SimpleDateFormat(dateFormatStr);
			return dateFormat.format(date);
		}
	}
	
	public static String getDate(String dateFormatStr) {
		return getDate(dateFormatStr, new Date());
	}
	
	public static int getMonth() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.MONTH)+1;
	}
	
	public static int getYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}
	
	public static int getDay() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.DAY_OF_MONTH);
	}
}