现在有多种日期格式,比如"2018/01/01"、"2018-01-01"、"2018 01 01"、"2018-01-01 12:12:12"、"2018年1月1日"
如何解析这些字符串呢?之前也是被困扰了很长时间,官方给我返回的时间格式为yyyyMMdd,我得解析成我想要的格式。
大神地址:点击进入
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateParse {
/**
* @param inputDate 要解析的字符串
* @param patterns 可能出现的日期格式
* @return 解析出来的日期,如果没有匹配的返回null
*/
public static Date parseDate(String inputDate,String[] patterns){
SimpleDateFormat df = new SimpleDateFormat();
for(String pattern:patterns){
df.applyPattern(pattern);
df.setLenient(false);//设置解析日期格式是否严格解析日期
ParsePosition pos = new ParsePosition(0);
Date date = df.parse(inputDate, pos);
if(date!=null){
return date;
}
}
return null;
}
//验证结果
public static void main(String[] args) {
String[] possiblePatterns =
{
"yyyy-MM-dd",
"yyyy-MM-dd HH:mm:ss",
"yyyyMMdd",
"yyyy/MM/dd",
"yyyy年MM月dd日",
"yyyy MM dd"
};
String inputDate1 = "2018-01-01";
String inputDate2 = "2018-01-01 12:12:12";
String inputDate3 = "20180101";
String inputDate4 = "2018/01/01";
String inputDate5 = "2018年01月01日";
String inputDate6 = "2018 01 01";
System.out.println(parseDate(inputDate6,possiblePatterns));
System.out.println(parseDate(inputDate1,possiblePatterns));
System.out.println(parseDate(inputDate2,possiblePatterns));
System.out.println(parseDate(inputDate3,possiblePatterns));
System.out.println(parseDate(inputDate4,possiblePatterns));
System.out.println(parseDate(inputDate5,possiblePatterns));
System.out.println(parseDate(inputDate6,possiblePatterns));
}
}
还有一个更简便的方法:org.apache.commons:commons-lang 包中有一个DateUtils类已经实现了这个功能。
public static Date parseDate(String inputDate) {
Date outputDate = null;
String[] possibleDateFormats =
{
"yyyy-MM-dd",
"yyyyMMdd",
"yyyy/MM/dd",
"yyyy年MM月dd日",
"yyyy MM dd"
};
try {
outputDate = DateUtils.parseDate(inputDate, possibleDateFormats);
} catch (ParseException e) {
e.printStackTrace();
}
return outputDate;
}