package com.brucezee.jspider.common.utils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期时间相关工具类 * Created by brucezee on 2017/1/7. */ public class SpiderTimeUtils { private static final Logger logger = LoggerFactory.getLogger(SpiderTimeUtils.class); public static final String FORMAT_YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_YYYYMMDDHHMMSS2 = "yyyy/MM/dd HH:mm:ss"; public static final String FORMAT_YYYYMMDDHHMMSS3 = "yy-MM-dd HH:mm:ss"; public static final String FORMAT_YYYYMMDDHHMMSS4 = "yyyyMMddHHmmss"; public static final String FORMAT_YYYYMMDD = "yyyy-MM-dd"; public static final String FORMAT_YYYYMMDD2 = "yyyy/MM/dd"; public static final String FORMAT_YYYYMMDD3 = "yyyy年MM月dd日"; public static final String FORMAT_YYYYMMDD4 = "yyyyMMdd"; public static final String FORMAT_YYYYMMDDHHMM = "yyyy-MM-dd HH:mm"; public static final String FORMAT_YYYYMMDDHHMM2 = "yyyy/MM/dd HH:mm"; public static final String FORMAT_YYYYMM = "yyyy-MM"; public static final String FORMAT_YYYYMM2 = "yyyy/MM"; public static final String FORMAT_YYYYMM3 = "yyyy年MM月"; public static final String FORMAT_YYYYMM4 = "yyyyMM"; /** * 转换日期字符串为日期对象 * @param timeText 日期字符串 * @param pattern 日期格式(如yyyy-MM-dd HH:mm:ss) * @return 成功返回日期对象,失败返回null。 */ public static Date parseDate(String timeText, String pattern) { if (StringUtils.isNotBlank(timeText)) { if (StringUtils.isNotBlank(pattern)) { try { return new SimpleDateFormat(pattern).parse(timeText); } catch (Exception e) { logger.error(e.getMessage(), e); } } else { return parseDate(timeText); } } return null; } /** * 格式化日期字符串,兼容部分通用日期格式 * @param timeText 日期字符串 * @return 字符串对应的日期 */ public static Date parseDate(String timeText) { if (StringUtils.isBlank(timeText)) { return null; } timeText = StringUtils.trim(timeText); if (timeText.contains("-")) { //常用的放在前面 if (timeText.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMMSS); } if (timeText.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDD); } if (timeText.matches("^\\d{2}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMMSS3); } if (timeText.matches("^\\d{4}-\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMM); } if (timeText.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMM); } } if (timeText.contains("/")) { //常用的放在前面 if (timeText.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMMSS2); } if (timeText.matches("^\\d{4}/\\d{1,2}/\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDD2); } if (timeText.matches("^\\d{4}/\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMM2); } if (timeText.matches("^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMM2); } } if (timeText.contains("年")) { if (timeText.matches("^\\d{4}年\\d{1,2}月\\d{1,2}日$")) { return parseDate(timeText, FORMAT_YYYYMMDD3); } if (timeText.matches("^\\d{4}年\\d{1,2}月$")) { return parseDate(timeText, FORMAT_YYYYMM3); } } //常用的放在前面 if (timeText.matches("\\d{6}")) { return parseDate(timeText, FORMAT_YYYYMM4); } if (timeText.matches("\\d{8}")) { return parseDate(timeText, FORMAT_YYYYMMDD4); } if (timeText.matches("\\d{14}")) { return parseDate(timeText, FORMAT_YYYYMMDDHHMMSS4); } throw new IllegalArgumentException("Invalid date format :" + timeText + ""); } /** * 将日期字符串转换成另外一种格式的日期字符串 * @param timeText 日期字符串 * @param pattern 原字符串的日期格式 * @param resultPattern 新日期的格式 * @return 指定的另外一种格式的日期字符串 */ public static String parseDateString(String timeText, String pattern, String resultPattern) { Date date = parseDate(timeText, pattern); if (date != null) { return formatTime(date, resultPattern); } return null; } /** * 将日期字符串转换成另外一种格式的日期字符串 * @param timeText 日期字符串 * @param resultPattern 新日期的格式 * @return 指定的另外一种格式的日期字符串 */ public static String parseDateString(String timeText, String resultPattern) { return parseDateString(timeText, null, resultPattern); } /** * 格式化时间 * @param time 日期 * @param pattern 时间格式字符串 如:yyyy-MM-dd HH:mm:ss * @return 指定格式的时间字符串 */ public static String formatTime(Date time, String pattern) { if (time != null && StringUtils.isNotBlank(pattern)) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); return simpleDateFormat.format(time); } return null; } /** * 转换日期字符串为时间毫秒数 * @param timeText 日期字符串 * @param pattern 日期格式(如yyyy-MM-dd HH:mm:ss) * @return 成功返回时间毫秒数,失败返回null。 */ public static Long parseTime(String timeText, String pattern) { Date date = parseDate(timeText, pattern); if (date != null) { return date.getTime(); } return null; } }