DateUtils工具类
Posted paranoidcat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DateUtils工具类相关的知识,希望对你有一定的参考价值。
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Date的通用工具类 * * @author ParanoidCAT * @since JDK 1.8 */ public class DateUtils { /** * 常量池 * DateFormat内部使用Calendar做缓存 * 并发不安全,因此常量池不保存DateFormat实例而是保存pattern字符串 * <p> * 每次都实例化新的SimpleDateFormat会有一定的额外开销 * 但比起数据安全来说是值得的 * * @see java.text.DateFormat */ public static final String DATE_PATTERN = "yyyy-MM-dd"; public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_TIME_MILLISECOND_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String[] PATTERNS = { DATE_PATTERN, DATE_TIME_PATTERN, DATE_TIME_MILLISECOND_PATTERN }; /** * 根据默认格式化模板datePattern将Date格式化为String * 默认格式化模板为"yyyy-MM-dd HH:mm:ss" * * @param date 待格式化的Date * @return java.lang.String */ public static String format(Date date) { return format(date, DATE_TIME_PATTERN); } /** * 根据指定的格式化模板datePattern将Date格式化为String * 若指定的格式化模板为empty,使用默认格式化模板 * * @param date 待格式化的Date * @param datePattern 指定的格式化模板 * @return java.lang.String */ public static String format(Date date, String datePattern) { if (null == date) { return null; } if (null == datePattern || datePattern.trim().length() <= 0) { return format(date); } return new SimpleDateFormat(datePattern).format(date); } /** * 根据指定的解析模板datePattern将String解析为Date * * @param dateString 待解析的String * @param datePattern 指定的解析模板 * @return java.utils.Date */ public static Date parse(String dateString, String datePattern) { if (null == dateString || dateString.trim().length() <= 0 || null == datePattern || datePattern.trim().length() <= 0) { return null; } try { DateFormat dateFormat = new SimpleDateFormat(datePattern); Date date = dateFormat.parse(dateString); // 注意,这里在完成解析后必须反向格式化进行校验才可以返回 if (dateString.equals(dateFormat.format(date))) { return date; } else { return null; } } catch (Exception e) { return null; } } /** * 根据一系列解析模板datePatterns将String解析为Date * * @param dateString 待解析的String * @param datePatterns 一系列解析模板 * @return java.utils.Date */ public static Date parse(String dateString, String[] datePatterns) { if (null == dateString || dateString.trim().length() <= 0 || null == datePatterns) { return null; } Date date = null; for (String datePattern : datePatterns) { if (null == date) { date = parse(dateString, datePattern); } } return date; } /** * 对Date进行变更的方法 * 内部使用Calendar实现 * 私有方法,只有date和amount为外部传入 * 为避免amount的形参为int时实参为null自动拆箱即抛出NullPointException(此时未进入方法无法捕获),使用Integer作为形参,在内部处理 * * @param date 待变更的Date * @param calendarField Calendar的字段编号 * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ private static Date add(Date date, int calendarField, Integer amount) { if (null == date) { return null; } if (null == amount) { return date; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(calendarField, amount); return calendar.getTime(); } /** * 变更Date的年 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addYears(Date date, Integer amount) { return add(date, Calendar.YEAR, amount); } /** * 变更Date的月 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addMonths(Date date, Integer amount) { return add(date, Calendar.MONTH, amount); } /** * 变更Date的日期 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addDays(Date date, Integer amount) { return add(date, Calendar.DATE, amount); } /** * 变更Date的小时 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addHours(Date date, Integer amount) { return add(date, Calendar.HOUR_OF_DAY, amount); } /** * 变更Date的分钟 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addMinutes(Date date, Integer amount) { return add(date, Calendar.MINUTE, amount); } /** * 变更Date的秒 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addSeconds(Date date, Integer amount) { return add(date, Calendar.SECOND, amount); } /** * 变更Date的毫秒 * * @param date 待变更的Date * @param amount 变更的数量(正数为增加负数为减少) * @return java.utils.Date */ public static Date addMilliseconds(Date date, Integer amount) { return add(date, Calendar.MILLISECOND, amount); } /** * 变更Date的时间为0时0分0秒 * * @param date 待变更的Date * @return java.utils.Date */ public static Date startTimeOfDate(Date date) { if (null == date) { return null; } return parse(format(date, DATE_PATTERN) + " 00:00:00.000", DATE_TIME_MILLISECOND_PATTERN); } /** * 变更Date的时间为23时59分59秒 * * @param date 待变更的Date * @return java.utils.Date */ public static Date endTimeOfDate(Date date) { if (null == date) { return null; } return parse(format(date, DATE_PATTERN) + " 23:59:59.999", DATE_TIME_MILLISECOND_PATTERN); } }
以上是关于DateUtils工具类的主要内容,如果未能解决你的问题,请参考以下文章