/////////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2012 smilonet. // All rights reserved /////////////////////////////////////////////////////////////////////////////////////////////////// package com.smilonet.common.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 时间对象和字符串的转换工具 * * @author wanglong(a)smilonet.com * @version 1.0 * @since 1.0 */ public class DateTimeUtils { // 工具类不允许创建实例 private DateTimeUtils() { } public enum TimeUnit { year, month, week, day, hour, minute, secend, millisecond } public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final Long MSEL_PER_SECEND = 1000l; public static final Long MSEL_PER_MINUTE = MSEL_PER_SECEND * 60; public static final Long MSEL_PER_HOUR = MSEL_PER_MINUTE * 60; public static final Long MSEL_PER_DAY = MSEL_PER_HOUR * 24; public static final Long MSEL_PER_WEEK = MSEL_PER_DAY * 7; /** * 按照yyyy-MM-dd的格式将日期转换为字符串 * * @param date * @return */ public static String convertDateToString(Date date) { return convertDateToString(date, DEFAULT_DATE_FORMAT); } /** * 按照yyyy-MM-dd HH:mm:ss的格式将日期转换为字符串 * * @param date * @return */ public static String convertTimeToString(Date date) { return convertTimeToString(date, DEFAULT_DATE_FORMAT); } /** * 按照指定格式,将日期转换为字符串 * * @param date * @param pattern * @return */ public static String convertDateToString(Date date, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } /** * 按照指定格式,将日期转换为字符串 * * @param date * @param pattern * @return */ public static String convertTimeToString(Date date, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } /** * 按照格式将字符串转换为date * * @param dateString * @param pattern * @return * @throws ParseException */ public static Date convertStringToDate(String dateString, String pattern) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.parse(dateString); } /** * 按照yyyy-MM-dd的格式将字符串转换为日期 * * @param dateString * @return * @throws ParseException */ public static Date convertStringToDate(String dateString) { try { SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT); return sdf.parse(dateString); } catch (ParseException e) { return null; } } /** * 按照yyyy-MM-dd的格式将字符串转换为日期 * * @param dateString * @return * @throws ParseException */ public static Date convertStringToTime(String dateString) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT); return sdf.parse(dateString); } /** * 获取当前的系统日期 * * @return 系统当前日期,格式年(4位) */ public static String getYear() { Calendar CD = Calendar.getInstance(); int YY = CD.get(Calendar.YEAR); StringBuffer curDateString = new StringBuffer(); curDateString.append(YY); return curDateString.toString(); } /** * 获取当前的系统日期 * * @return 系统当前日期,格式月(两位) */ public static String getMonth() { Calendar CD = Calendar.getInstance(); int MM = CD.get(Calendar.MONTH) + 1; StringBuffer curDateString = new StringBuffer(); curDateString.append(MM); return curDateString.toString(); } /** * 获取当前的系统日期 * * @return 系统当前日期,格式日(两位) */ public static String getDay() { Calendar CD = Calendar.getInstance(); int DD = CD.get(Calendar.DATE); StringBuffer curDateString = new StringBuffer(); curDateString.append(DD); return curDateString.toString(); } public static String getDate(String dateFormat) { return convertDateToString(new Date(), dateFormat); } /** * 获取当前的系统日期 * * @return 系统当前日期,格式西元年(4位)+月(2位)+日(2位) */ public static String getDate() { return convertDateToString(new Date()); // Calendar CD = Calendar.getInstance(); // int YY = CD.get(Calendar.YEAR); // int MM = CD.get(Calendar.MONTH) + 1; // int DD = CD.get(Calendar.DATE); // StringBuffer curDateString = new StringBuffer(); // curDateString.append(YY); // curDateString.append("-"); // curDateString.append(StringUtils.formatStringLength(String.valueOf(MM), // '0', 2)); // curDateString.append("-"); // curDateString.append(StringUtils.formatStringLength(String.valueOf(DD), // '0', 2)); // return curDateString.toString(); } /** * 获取当前的系统时间 * * @return 系统当前时间,格式时(2位)+分(2位)+秒(2位) */ public static String getDateTime() { Calendar CD = Calendar.getInstance(); int YY = CD.get(Calendar.YEAR); int MM = CD.get(Calendar.MONTH) + 1; int DD = CD.get(Calendar.DATE); int HH = CD.get(Calendar.HOUR_OF_DAY); int mm = CD.get(Calendar.MINUTE); int ss = CD.get(Calendar.SECOND); StringBuffer curDateTimeString = new StringBuffer(); curDateTimeString.append(String.valueOf(YY)); curDateTimeString.append("-"); curDateTimeString.append(StringUtils.formatStringLength(String.valueOf(MM), '0', -2)); curDateTimeString.append("-"); curDateTimeString.append(StringUtils.formatStringLength(String.valueOf(DD), '0', -2)); curDateTimeString.append(" "); curDateTimeString.append(StringUtils.formatStringLength(String.valueOf(HH), '0', -2)); curDateTimeString.append(":"); curDateTimeString.append(StringUtils.formatStringLength(String.valueOf(mm), '0', -2)); curDateTimeString.append(":"); curDateTimeString.append(StringUtils.formatStringLength(String.valueOf(ss), '0', -2)); return curDateTimeString.toString(); } /** * 获取当前的系统时间 * * @return 系统当前时间,格式时(2位)+分(2位)+秒(2位) */ public static String getTime() { Calendar CD = Calendar.getInstance(); int HH = CD.get(Calendar.HOUR_OF_DAY); int mm = CD.get(Calendar.MINUTE); int ss = CD.get(Calendar.SECOND); StringBuffer curTimeString = new StringBuffer(); curTimeString.append(StringUtils.formatStringLength(String.valueOf(HH), '0', -2)); curTimeString.append(":"); curTimeString.append(StringUtils.formatStringLength(String.valueOf(mm), '0', -2)); curTimeString.append(":"); curTimeString.append(StringUtils.formatStringLength(String.valueOf(ss), '0', -2)); return curTimeString.toString(); } /** * 获取当前的系统时间的小时 * * @return 系统当前小时 */ public static int getHour() { Calendar CD = Calendar.getInstance(); int HH = CD.get(Calendar.HOUR_OF_DAY); return HH; } /** * 获取当前的系统时间的分钟 * * @return 系统当前分钟 */ public static int getMinute() { Calendar CD = Calendar.getInstance(); int mm = CD.get(Calendar.MINUTE); return mm; } public static Long getTimeDispersion(Date beginTime, Date endTime, TimeUnit timeUnit) { if (endTime == null) { return null; } Long dis = endTime.getTime() - beginTime.getTime(); Long result = dis; switch (timeUnit) { case year: case month: break; case week: result = dis / MSEL_PER_WEEK; break; case day: result = dis / MSEL_PER_DAY; break; case hour: result = dis / MSEL_PER_HOUR; break; case minute: result = dis / MSEL_PER_MINUTE; break; case secend: result = dis / MSEL_PER_SECEND; break; case millisecond: break; } return result; } /** * 获取两个日期的差 * * @param beginTime * @param endTime * @param timeUnit * @return */ public static Long getTimeDispersion(String beginTime, String endTime, TimeUnit timeUnit) { try { if (StringUtils.isEmpty(endTime)) { return null; } return getTimeDispersion(convertStringToTime(endTime), convertStringToTime(beginTime), timeUnit); } catch (ParseException e) { return null; } } /** * 将时间向前(正数),后(负数)移动 * * @param beMovedDateString * @param movedDays * @return * @throws ParseException */ public static String moveTime(String beMovedTimeString, int movedDays) throws ParseException { if (StringUtils.isEmpty(beMovedTimeString)) { beMovedTimeString = getDateTime(); } Date beMovedTime = convertStringToTime(beMovedTimeString); Date moveResult = moveDateTime(beMovedTime, movedDays); return convertTimeToString(moveResult); } /** * 将日期向前(正数),后(负数)移动 * * @param beMovedDateString * @param movedDays * @return * @throws ParseException */ public static String moveDate(String beMovedDateString, int movedDays) throws ParseException { if (StringUtils.isEmpty(beMovedDateString)) { beMovedDateString = getDate(); } Date beMovedDate = convertStringToTime(beMovedDateString); Date moveResult = moveDateTime(beMovedDate, movedDays); return convertDateToString(moveResult); } /** * 移动日期 * * @param movedDate * @param movedNum * @return */ public static Date moveDateTime(Date movedDate, int movedNum) { Calendar calendar = Calendar.getInstance(); calendar.setTime(movedDate); calendar.add(Calendar.DAY_OF_MONTH, movedNum); return calendar.getTime(); } /** * 判断字符串是否是日期 * * @param targetString * @return */ public static boolean isDate(String targetString) { if (StringUtils.matchReg(targetString, "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$")) { return true; } else { return false; } } }