【JAVA】日期格式控制類

package com.util.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtil {
    private static final String[] CHINA_WEEKDAY = {"週日", "週一", "週二", "週三",
            "週四", "週五", "週六"};
    private static final String CHINA_YYYY_MM_DD = "yyyy年MM月dd日";
    private static final String MM_DD_SPLASH = "MM/dd";
    private static final int START_YEAR = 1900;
    private static final String YYYY_MM_DD = "yyyy-MM-dd";
    private static final String YYYY_MM_DD_SPLASH = "yyyy/MM/dd";
    private static final String HH_MM_SS = "hh:mm:ss";
    /**
     * @param time
     *            hh:mm
     * @return hh時mm分
     */
    public static String changeHHMMtoChinaHHMM(String time) {
        int colonIndex = time.indexOf(":");
        String hour = time.substring(0, colonIndex);
        String minus = time.substring(colonIndex + 1, time.length());
        return hour + "時" + minus + "分";
    }
    /**
     * 將YYYY-MM-DD 轉化爲 YYYY年MM月DD日
     * 
     * @param yyyymmdd
     *            YYYY-MM-DD
     * @return 可能返回爲空
     */
    public static String changeYYYYMMDDToChinaYYYYMMDD(String yyyymmdd) {
        try {
            return formatDateToChinaYYYYMMDD(formatYYYYMMDDToDate(yyyymmdd));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 格式化爲Date型
     * 
     * @param date
     *            YYYY年MM月DD日
     */
    public static Date formatChinaYYYYMMDDToDate(String date)
            throws ParseException {
        return new SimpleDateFormat(CHINA_YYYY_MM_DD, Locale.CHINA).parse(date);
    }
    /**
     * 格式化爲"XXXX年XX月XX日"
     */
    public static String formatDateToChinaYYYYMMDD(Date date) {
        return getYear(date) + "年" + (date.getMonth() + 1) + "月"
                + date.getDate() + "日";
    }
    /**
     * 格式化爲"XX月XX日"
     */
    public static String formatDateToMMDD(Date date) {
        return (date.getMonth() + 1) + "月" + date.getDate() + "日";
    }
    /**
     * 格式化爲"mm/dd"
     */
    public static String formatDateToMMDDSplash(Date date) {
        return new SimpleDateFormat(MM_DD_SPLASH, Locale.CHINA).format(date);
    }
    /**
     * 格式化爲"yyyy-mm-dd"
     */
    public static String formatDateToYYYYMMDD(Date date) {
        return new SimpleDateFormat(YYYY_MM_DD, Locale.CHINA).format(date);
    }
    /**
     * 格式化爲"yyyy/mm/dd"
     */
    public static String formatDateToYYYYMMDDSplash(Date date) {
        return new SimpleDateFormat(YYYY_MM_DD_SPLASH, Locale.CHINA)
                .format(date);
    }
    /**
     * 格式化爲Date型
     * 
     * @param date
     *            YYYY-MM-DD
     */
    public static Date formatYYYYMMDDToDate(String date) throws ParseException {
        return new SimpleDateFormat(YYYY_MM_DD, Locale.CHINA).parse(date);
    }
    /**
     * 將YYYY-MM-DD 格式化爲"XX月XX日"
     * 
     * @param date
     * @return 可能返回爲空
     */
    public static String formatYYYYMMDDToMMDD(String date) {
        try {
            return formatDateToMMDD(formatYYYYMMDDToDate(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 獲取周幾
     * 
     * @param date
     * @return 返回值爲:未知,週一,週二,週三,週四,週五,週六,週日
     */
    public static String getChinaWeekDay(Date date) {
        int weekday = getWeekDay(date);
        return CHINA_WEEKDAY[weekday];
    }
    /**
     * 獲取周幾
     * 
     * @param date
     * @return 返回值爲:未知,週一,週二,週三,週四,週五,週六,週日
     */
    public static String getChinaWeekDay(String date) {
        int weekday = getWeekDay(date);
        return CHINA_WEEKDAY[weekday];
    }
    /**
     * 獲取年份
     * 
     * @param date
     *            yyyy-mm-dd
     * @return 返回值爲:XXXX年
     */
    public static String getChinaYear(String date) {
        return getYear(date) + "年";
    }
    /**
     * 得到指定日期的間隔後的日期
     * 
     * @param date
     * @param days
     *            間隔天數。 >0,表示後面的日期 <0,表示前面的日期
     */
    public static Date getDayAfter(Date date, int days) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day + days);
        return c.getTime();
    }
    /**
     * 得到指定日期的間隔後的日期
     * 
     * @param date
     *            yyyy-mm-dd
     * @param days
     *            間隔天數。 >0,表示後面的日期 <0,表示前面的日期
     */
    public static Date getDayAfter(String date, int days) {
        try {
            return getDayAfter(formatYYYYMMDDToDate(date), days);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 獲取兩個日期之間的天數
     * 
     * @param startDate
     *            yyyy-mm-dd
     * @param endDate
     *            yyyy-mm-dd
     * @return
     */
    public static int getDaysBetween(String startDate, String endDate) {
        int len = 0;
        try {
            SimpleDateFormat df = new SimpleDateFormat(YYYY_MM_DD, Locale.CHINA);
            java.util.Date cDate;
            cDate = df.parse(startDate);
            java.util.Date dDate = df.parse(endDate);
            long betweenDate = (dDate.getTime() - cDate.getTime())
                    / (24 * 60 * 60 * 1000);
            len = (int) betweenDate;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return len;
    }
    /**
     * 獲取星期幾
     * 
     * @param date
     *            yyyy-mm-dd
     * @return 返回值爲:1,2,3,4,5,6,7. 出錯返回0
     */
    public static int getWeekDay(Date date) {
        return date.getDay() /* + 1 */;
    }
    /**
     * 獲取星期幾
     * 
     * @param date
     *            yyyy-mm-dd
     * @return 返回值爲:1,2,3,4,5,6,7. 出錯返回0
     */
    public static int getWeekDay(String date) {
        try {
            return getWeekDay(formatYYYYMMDDToDate(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
    /**
     * 獲取年份
     * 
     * @param date
     * @return XXXX
     */
    public static int getYear(Date date) {
        return date.getYear() + START_YEAR;
    }
    /**
     * 獲取年份
     * 
     * @param date
     *            yyyy-mm-dd
     * @return XXXX
     */
    public static int getYear(String date) {
        try {
            return getYear(formatYYYYMMDDToDate(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return START_YEAR;
    }
    public static String formatDateToYYYYMMDDHHMMSS(Date date) {
        return new SimpleDateFormat(YYYY_MM_DD + " " + HH_MM_SS, Locale.CHINA)
                .format(date);
    }
}
相關文章
相關標籤/搜索