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); } }