現在有多種日期格式,比如"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;
}