java多种时间格式混合输⼊_如何使⽤SimpleDateFormat以多
种格式解析⽇期
Matt的上述⽅法很好,但请注意,如果您使⽤它来区分格式的⽇期,则会遇到问题。y/M/d和d/M/y..例如,将格式化程序初始化为y/M/d 会接受这样的约会01/01/2009还给你⼀个明显不是你想要的⽇期。我解决了这个问题如下,但我的时间有限,我不满意的解决⽅案有两个主要原因:它违反了乔希·布洛赫的⼀条基线,特别是“不要使⽤异常来处理程序流”。
时间正则表达式java
我能看到
getDateFormat()⽅法,如果您需要它来处理许多其他的⽇期格式,那么它就变成了⼀场噩梦。
如果我必须做⼀些能够处理⼤量不同⽇期格式并且需要⾼性能的东西,那么我想我应该使⽤创建⼀个枚举的⽅法,它将每个不同的⽇期正则表达式与其格式联系起来。然后使⽤MyEnum.values()循环遍历枚举并⽤Pattern().matches(date))⽽不是捕捉⽇期格式异常。
另外,可以这样说,以下内容可以处理格式的⽇期'y/M/d' 'y-M-d' 'y M d' 'd/M/y' 'd-M-y' 'd M y'以及包括时间格式在内的所有其他变体:ParseException;SimpleDateFormat;import java.util.Date;public class DateUtil {
private static final String[] timeFormats = {"HH:mm:ss","HH:mm"};
private static final String[] dateSeparators = {"/","-"," "};
private static final String DMY_FORMAT = "dd{sep}MM{sep}yyyy";
private static final String YMD_FORMAT = "yyyy{sep}MM{sep}dd";
private static final String ymd_template = "\\d{4}{sep}\\d{2}{sep}\\d{2}.*";
private static final String dmy_template = "\\d{2}{sep}\\d{2}{sep}\\d{4}.*";
public static Date stringToDate(String input){
Date date = null;
String dateFormat = getDateFormat(input);
if(dateFormat == null){
throw new IllegalArgumentException("Date is not in an accepted format " + input);
}
for(String sep : dateSeparators){
String actualDateFormat = patternForSeparator(dateFormat, sep);
//try first with the time
for(String time : timeFormats){
date = tryParse(input,actualDateFormat + " " + time);
if(date != null){
return date;
}
}
//didn't work, try without the time formats
date = tryParse(input,actualDateFormat);
if(date != null){
return date;
}
}
return date;
}
private static String getDateFormat(String date){
for(String sep : dateSeparators){
String ymdPattern = patternForSeparator(ymd_template, sep);
String dmyPattern = patternForSeparator(dmy_template, sep);
if(date.matches(ymdPattern)){
return YMD_FORMAT;
}
if(date.matches(dmyPattern)){
return DMY_FORMAT;
}
}
return null;
}
private static String patternForSeparator(String template, String sep){ place("{sep}", sep);
}
private static Date tryParse(String input, String pattern){
try{
return new SimpleDateFormat(pattern).parse(input);
}
catch (ParseException e) {}
return null;
}}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。