/** * DateUtils.java */ package com.aspire.common.util; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * <p> * Title: 日期操作类 * </p> * <p> * Description: 完成一些对日期的计算工作 * </p> * <p> * Copyright: Copyright (c) 2007 * </p> * <p> * Company: aspire technology * </p> * * @author zengjin * @version 1.0.0.0 * @CheckItem@ NEW-zengjin-20070110-patch001-ADD40 新增 */ public class DateUtils { /** * 显示日期的格式,yyyy-MM-dd */ public static final String DATE_FORMAT = "yyyy-MM-dd"; /** * 显示日期的格式,yyyy-MM-dd HH:mm:ss */ public static final String TIMEF_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * 显示日期的格式,yyyy年MM月dd日HH时mm分ss秒 */ public static final String ZHCN_TIME_FORMAT = "yyyy年MM月dd日HH时mm分ss秒"; /** * 显示日期的格式,yyyyMMddHHmmss */ public static final String TIME_STR_FORMAT = "yyyyMMddHHmmss"; /** * 显示日期的格式,yyyyMMdd */ public static final String DATE_STR_FORMAT = "yyyyMMdd"; /** * 显示日期的格式,yyyyMMdd */ public static final String DATE_HH_STR_FORMAT = "yyyy-MM-dd-HH"; public static final String DATE_HH_STR_SSS_FORMAT = "yyyy/MM/dd HH:mm:ss:SSS"; /** * DateFormat,格式:yyyy-MM-dd */ private static DateFormat dateFormat; /** * DateFormat,格式:yyyy-MM-dd HH:mm:ss */ private static DateFormat dateTimeFormat; /** * DateFormat,格式:yyyyMMddHHmmss */ private static DateFormat dateTimeStrFormat; /** * DateFormat,格式:yyyy年MM月dd日HH时mm分ss秒 */ private static DateFormat zhcnDateTimeStrFormat; static { dateFormat = new SimpleDateFormat(DATE_FORMAT); dateTimeFormat = new SimpleDateFormat(TIMEF_FORMAT); dateTimeStrFormat = new SimpleDateFormat(TIME_STR_FORMAT); zhcnDateTimeStrFormat = new SimpleDateFormat(ZHCN_TIME_FORMAT); } /** * 获取当前时间在+-n分钟后的字符串时间 * * @param n * int * @return String */ public static String getTimebyMinAfter(int n) { Calendar now = Calendar.getInstance(TimeZone.getDefault()); now.add(Calendar.MINUTE, n); return (dateTimeFormat.format(now.getTime())); } /** * 获取当前时间在+-n秒后的字符串时间 * * @param n * int * @return String */ public static String getTimebySecAfter(int n) { Calendar now = Calendar.getInstance(TimeZone.getDefault()); now.add(Calendar.SECOND, n); return (dateTimeFormat.format(now.getTime())); } /** * 获取定义的DateFormat格式 * * @param formatStr * @return */ private static DateFormat getDateFormat(String formatStr) { if (formatStr.equalsIgnoreCase(DATE_FORMAT)) { return dateFormat; } else if (formatStr.equalsIgnoreCase(TIMEF_FORMAT)) { return dateTimeFormat; } else { return new SimpleDateFormat(formatStr); } } /** * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串 * * @param date * 日期 * @return String 字符串 */ public static String dateToDateString(Date date) { return dateToDateString(date, TIMEF_FORMAT); } /** * 将Date转换成formatStr格式的字符串 * * @param date * @param formatStr * @return */ public static String dateToDateString(Date date, String formatStr) { DateFormat df = getDateFormat(formatStr); return df.format(date); } /** * 将小时数换算成返回以毫秒为单位的时间 * * @param hours * @return */ public static long getMicroSec(BigDecimal hours) { BigDecimal bd; bd = hours.multiply(new BigDecimal(3600 * 1000)); return bd.longValue(); } /** * 获取今天的日期,格式自定 * * @param pattern - * 设定显示格式 * @return String - 返回今天的日期 */ public static String getToday(String pattern) { Calendar now = Calendar.getInstance(TimeZone.getDefault()); DateFormat sdf = getDateFormat(pattern); sdf.setTimeZone(TimeZone.getDefault()); return (sdf.format(now.getTime())); } // 得到系统当前的分钟数,如当前时间是上午12:00,系统当前的分钟数就是12*60 public static int getCurrentMinutes() { Calendar now = Calendar.getInstance(TimeZone.getDefault()); int iMin = now.get(Calendar.HOUR_OF_DAY) * 60 + now.get(Calendar.MINUTE); return iMin; } /** * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式 * * @return 当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式 */ public static String getCurZhCNDateTime() { return dateToDateString(new Date(), ZHCN_TIME_FORMAT); } /** * 获取当前时间 yyyyMMddHHmmss 的格式 * */ public static String getCurTime24(){ return dateToDateString(new Date(),TIME_STR_FORMAT); } /** * @return 得到本月月份 如09 */ public static String getMonth() { Calendar now = Calendar.getInstance(); int month = now.get(Calendar.MONTH) + 1; String monStr = String.valueOf(month); // 对于10月份以下的月份,加"0"在前面 if (month < 10) monStr = "0" + monStr; return monStr; } /** * 根据失效时间判断是否依然有效 * * @param expireTime * 失效时间的字符串形式,格式要求:yyMMddHHmmss * @return true:失效 false:没有失效 * @throws ParseException */ public static boolean isTimeExpired(String expireTime) throws ParseException { boolean ret = false; // SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象 Date date = new SimpleDateFormat(TIME_STR_FORMAT).parse(expireTime); Calendar expire = Calendar.getInstance(); expire.setTime(date); Calendar now = Calendar.getInstance(); // 将毫秒字段设为0,保持精度一致性 now.set(Calendar.MILLISECOND, 0); if (now.after(expire)) { ret = true; } return ret; } /** * 根据开始时间和可用时间计算出失效时间 * * @param startTime * 开始时间 * @param availableTime * 有效时长(单位:秒) * @return 失效时间 * @throws ParseException */ public static String getExpireTimeByCalculate(Date startTime, int availableTime) { Calendar expire = Calendar.getInstance(); // 设置为开始时间 expire.setTime(startTime); // 开始时间向后有效时长秒得到失效时间 expire.add(Calendar.SECOND, availableTime); // 返回失效时间字符串 // SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象 return new SimpleDateFormat(TIME_STR_FORMAT).format(expire.getTime()); } /** * 将Date转换为yyMMddHHmmss的形式 * * @param date * @return 日期的字符串形式,格式:yyMMddHHmmss */ public static String convertDateToString(Date date) { return new SimpleDateFormat(TIME_STR_FORMAT).format(date); } /** * 将yyMMddHHmmss形式的字符串转换成Date的形式 * * @param date * yyMMddHHmmss形式的日期字符串 * @return Date对象 * @throws ParseException */ public static Date convertStringToDate(String date) throws ParseException { return new SimpleDateFormat(TIME_STR_FORMAT).parse(date); } /** * @param date * yyyyMMddHHmmss格式的日期字符转换为yyyy年MM月dd日HH时mm分ss秒格式的字符串 * @return yyyy年MM月dd日HH时mm分ss秒格式的日期字符串 * @throws ParseException */ public static String convertStringToZhCN(String date) throws ParseException { return zhcnDateTimeStrFormat.format(dateTimeStrFormat.parse(date)); } // ### add by xukejun on v1.5.0.0.006 start ### /** * 获取昨日日期 返回格式:yyyy-MM-dd */ public static String getYesterdayDate() { // 获取昨日的日期 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, -1); Date yesterday = cal.getTime(); return new SimpleDateFormat(DATE_FORMAT).format(yesterday); } // ### add by xukejun on v1.5.0.0.006 end ### /** * @param dateString yyyy/MM/dd HH:mm:ss * @return * @throws ParseException */ public static String convertStringToString(String dateString) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = sdf.parse(dateString); return convertDateToString(date); } /** * 将yyMMddHHmmss形式的字符串转换成Date的形式 * * @param date * yyMMddHHmmss形式的日期字符串 * @return Date对象 * @throws ParseException */ public static Date convertStringToDate(String date,String formatString) throws ParseException { return new SimpleDateFormat(formatString).parse(date); } /** * 获得延迟后的日期 * @param src(基于日期) * @param count(延迟数) * @param type(延迟类型:Y--年;M--月;D--天;H--小时) * @return * @author x_shengqiang * @date 2010-1-4 */ public static Date getDelayDate(Date src,int count,String type)throws ParseException{ Calendar cal=Calendar.getInstance(); cal.setTime(src); if("Y".equals(type)){ cal.add(Calendar.YEAR, count); }else if("M".equals(type)){ cal.add(Calendar.MONTH, count); }else if("D".equals(type)){ cal.add(Calendar.DATE, count); }else if("H".equals(type)){ cal.add(Calendar.HOUR, count); } return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime()))); } /** * 获取月份第一天 * @param src * @return * @author x_shengqiang * @date 2010-1-4 */ public static Date getMonthFirstDate(Date src)throws ParseException{ Calendar cal=Calendar.getInstance(); cal.setTime(src); cal.set(Calendar.DATE, 1); return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime()))); } /** * 获取月份最后一天 * @param src * @return * @author x_shengqiang * @date 2010-1-4 */ public static Date getLastDayOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, 1); cal.roll(Calendar.DAY_OF_MONTH, -1); return cal.getTime(); } /** * 获得yyyy-MM-dd格式的日期 * @param src * @param pattern * @return * @author x_shengqiang * @date 2010-1-5 */ public static Date getPatternDate(String src)throws ParseException{ return new SimpleDateFormat(DATE_FORMAT).parse(src); } }