package com.uisftech.hr.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @author luozehua * @date 2014年3月28日 * @time 上午10:19:28 */ public class DateTimeUtil { private static Calendar calendar = Calendar.getInstance(); /** * 将一个日期对象格式化为一个字符串。格式为:yyyy-MM-dd HH:mm:ss * * @param date * 要处理的日期 * @return 处理后的日期(字符串) */ public static String parseDateToString(Date date) { if (null == date) { return "-1"; } String pattern = "yyyy-MM-dd HH:mm:ss"; return new SimpleDateFormat(pattern).format(date); } /** * 将一个日期对象格式化为一个字符串。字符串格式由调用方法指定 * * @param date * 要处理的日期 * @param pattern * 日期格式的模式字符串 * @return 处理后的日期(字符串) * * */ public static String parseDateToString(final Date date, final String pattern) { if (null == date) { return "-1"; } if (StringUtil.isEmpty(pattern)) { return parseDateToString(date); } return new SimpleDateFormat(pattern).format(date); } /** * 将一个字符串解析为一个日期对象。字符串格式为:yyyy-MM-dd * * @param dateStr * 要解析的日期字符串 * @return 日期对象 * */ public static Date parseStringToDate(final String dateStr) { if (StringUtil.isEmpty(dateStr)) { return null; } Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 将一个字符串解析为一个日期对象。字符串格式由调用方法指定 * * @param dateStr * 要解析的日期字符串 * @param pattern * 日期格式的模式字符串 * @return 日期对象 * * 不能被解析的日期格式的模式字符串 */ public static Date parseStringToDate(final String dateStr, final String pattern) { if (StringUtil.isEmpty(dateStr)) { return null; } if (StringUtil.isEmpty(pattern)) { return parseStringToDate(dateStr); } Date date = null; try { date = new SimpleDateFormat(pattern).parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 取指定日期的下一天 * * @param dateStr * 指定的日期 * @return 指定日期的后一天 * */ public static String getNextDay(final String dateStr) { if (StringUtil.isEmpty(dateStr)) { return "-1"; } if (!isDateStr(dateStr,"yyyy-MM-dd")) { return "-1"; } Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(date); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1); return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); } /** * 取指定日期的前一天 * * @param dateStr * 指定的日期 * @return 指定日期的前一天 * */ public static String getBeforeDay(final String dateStr) { if (StringUtil.isEmpty(dateStr)) { return "-1"; } if (!isDateStr(dateStr,"yyyy-MM-dd")) { return "-1"; } Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(date); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1); return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); } /** * 根据生日计算年龄(到当前日期) * * @param birthday * 出生日期 * @return 年龄 */ public static int getAge(final Date birthday) { if (null == birthday) { return -1; } calendar = Calendar.getInstance(); if (calendar.before(birthday)) { // 生日在当前如期的后面 return -1; } // 获得当前的时间 int currentYear = calendar.get(Calendar.YEAR); int currentMonth = calendar.get(Calendar.MONTH) + 1; int currentDay = calendar.get(Calendar.DAY_OF_MONTH); calendar.setTime(birthday); // 获得生日的时间 int birthdayYear = calendar.get(Calendar.YEAR); int birthdayMonth = calendar.get(Calendar.MONTH) + 1; int birthdayDay = calendar.get(Calendar.DAY_OF_MONTH); int age = currentYear - birthdayYear; if (currentMonth <= birthdayMonth) { if (currentMonth == birthdayMonth) { if (currentDay < birthdayDay) { age--; } } } return age; } /** * 根据生日计算年龄(到指定日期) * * @param birthday * @param date * @return */ public static int getAge(final Date birthday, final Date date) { calendar = Calendar.getInstance(); if (null == birthday || null == date) { return -1; } if (date.before(birthday)) { return -1; } // 获得指定时间 calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); // 获得生日时间 calendar.setTime(birthday); int birthdayYear = calendar.get(Calendar.YEAR); int birthdayMonth = calendar.get(Calendar.MONTH) + 1; int birthdayDay = calendar.get(Calendar.DAY_OF_MONTH); int age = year - birthdayYear; if (month <= birthdayMonth) { if (month == birthdayMonth) { if (day < birthdayDay) { age--; } } } return age; } /** * 判断指定字符串是否符合日期的格式 * * @param dateStr * @return DateTimeUtil.isDateStr("1990-01-32 00:00:00") = false * DateTimeUtil.isDateStr("1990-01 00:00") = false * DateTimeUtil.isDateStr("1990-1-1 00:00:00") = true * DateTimeUtil.isDateStr("1990-01-3") = true * DateTimeUtil.isDateStr("1990-21-31 00:00:00") = false * DateTimeUtil.isDateStr("1990年01月3日 00时00分00秒") = false */ public static boolean isDateStr(final String dateStr,final String pattern) { SimpleDateFormat format = new SimpleDateFormat(pattern); format.setLenient(false); try { format.parse(dateStr); } catch (ParseException e) { return false; } return true; } public static void main(String[] args) { System.out.println(DateTimeUtil.isDateStr("110908","yyMMdd")); } }