java格式化Date
对多种格式的时间字符串进行格式化,需求是写一个通用的时间格式化的方法,之前就是按每个格式去匹配,匹配上了就返回,异常就try {} catch (Exception e) {}进行下一次匹配;直到看到了org.apache.commons.lang3.time.DateUtils 的 parseDate 方法;做个笔记
源码为
按我的理解就是 时间字符串 按 parsePatterns 的格式挨个进行匹配,匹配上了就返回;没有就抛异常;
看源码也确实是一个for循环去匹配
导包
import org.apache.commons.lang3.time.DateUtils;
代码
public static final String LONG_PARSE_PATTERNS[] = new String[]
{
"yyyy-MM-dd HH:mm:ss",
"yyyy-M-d h:m:s",
"yyyy/MM/dd HH:mm:ss",
"yyyy/M/d h:m:s",
"yyyyMMddHHmmss",
"yyyyMMdd HHmmss"
};
public static final String SHORT_PARSE_PATTERNS[] = new String[]
{
"yyyy-MM-dd",
"yyyy-M-d",
"yyyy/MM/dd",
"yyyy/M/d",
"yyyyMMdd"
};
public static String formatDateString(String dateTime, String valueFormat) {
return formatDateString(dateTime, valueFormat, LONG_PARSE_PATTERNS, SHORT_PARSE_PATTERNS);
}
/**
* @param dateTime 时间字符串
* @param valueFormat 时间格式化的格式
* @param longParsePatterns 长时间匹配格式
* @param shortParsePatterns 短时间匹配格式
* @return
*/
public static String formatDateString(String dateTime, String valueFormat, String[] longParsePatterns, String[] shortParsePatterns) {
String timeStr = "";
if(StringUtils.isNotBlank(dateTime)) {
try {
Date time;
if(dateTime.trim().length() > 10) {
time = DateUtils.parseDate(dateTime.trim(), longParsePatterns);
} else {
time = DateUtils.parseDate(dateTime.trim(), shortParsePatterns);
}
return formatDate(time, valueFormat);
} catch (Exception e) {
log.info("时间格式化错误" + dateTime, e);
}
}
return timeStr;
}
public static String formatDate(Date value, String format){
DateFormat formatter = new SimpleDateFormat(format);
String date = formatter.format(value);
return date;
}