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