Java 避免对日期中的YYYY-MM--dd格式进行特殊检查
我在下面介绍了处理不同日期模式的方法 下面是处理不同日期格式的方法 现在,对于特定格式YYYY-MM-dd,我不想让它去检查我们在代码中前面加前缀20的位置。请建议我如何跳过这一部分。假设日期模式是yyy-MM-dd,那么就避免在年份前面加前缀20的逻辑 下面是我的代码Java 避免对日期中的YYYY-MM--dd格式进行特殊检查,java,date,Java,Date,我在下面介绍了处理不同日期模式的方法 下面是处理不同日期格式的方法 现在,对于特定格式YYYY-MM-dd,我不想让它去检查我们在代码中前面加前缀20的位置。请建议我如何跳过这一部分。假设日期模式是yyy-MM-dd,那么就避免在年份前面加前缀20的逻辑 下面是我的代码 public java.util.Date extractDate(String dateStr, String dateType) { String[] datePatternsOfUk = { "d-M-y
public java.util.Date extractDate(String dateStr, String dateType) {
String[] datePatternsOfUk = { "d-M-yy", "d-M-yyyy", "d/M/yy", "d/M/yyyy", "yyyy-MM-dd","dd-MM-yy", "dd-MMM-yy","dd-MMM-yyyy","dd-MM-yyyy",
"dd/MM/yy","dd/MMM/yy","dd/MMM/yyyy"};
String[] datePatternsOfUs = { "M-d-yy","MM-dd-yy","M/d/yy","MM/dd/yy", "MM/dd/yy", "MMM-dd-yy",
"MMM/dd/yy", "MMM-dd-yyyy", "MM-dd-yyyy", "MMM/dd/yyyy",
"MM/dd/yyyy" };
java.util.Date date = null;
String[] datePatterns = datePatternsOfUk;
if (dateType.equals("US")) {
datePatterns = datePatternsOfUs;
} else if (dateType.equals("UK")) {
datePatterns = datePatternsOfUk;
}
///******code should not go in this check where date pattern is YYYY-MM-dd
int p = dateStr.lastIndexOf("/");
if (p == -1) {
p = dateStr.lastIndexOf("-");
}
String firstSubstring = dateStr.substring(0, p + 1);
String secondSubstring = dateStr.substring(p + 1);
if (p != -1 && secondSubstring.length() <= 2) {
secondSubstring = Integer.toString(2000 + Integer.parseInt(secondSubstring));
dateStr = firstSubstring + secondSubstring;
}
///****************************************//
try {
date = DateUtils.parseDate(dateStr, datePatterns);
} catch (ParseException ex) {
logger.error("##$$$$$### Error in invoice inside extractDate method : ##$$$$$$#### "
+ ErrorUtility.getStackTraceForException(ex));
}
return date;
}
public java.util.Date extractDate(字符串dateStr,字符串dateType){
字符串[]datePatternsOfUk={“d-M-yy”、“d-M-yyy”、“d/M/yy”、“d/M/yyyy”、“yyyy-MM-dd”、“dd-MM-yy”、“dd-MMM-yyyy”、“dd-MM-yyyy”,
“dd/MM/yy”、“dd/MMM/yy”、“dd/MMM/yyy”};
字符串[]datePatternsOfUs={“M-d-yy”、“MM-dd-yy”、“M/d/yy”、“MM/dd/yy”、“MM/dd/yy”、“MM-dd-yy”,
“年/月/日”、“年/月/日”、“年/月/日”、“年/月/日”,
“MM/dd/yyyy”};
java.util.Date=null;
String[]datePatterns=datePatternsOfUk;
如果(日期类型等于(“US”)){
datePatterns=datePatternsOfUs;
}else if(dateType.equals(“UK”)){
datePatterns=datePatternsOfUk;
}
///******当日期模式为YYYY MM dd时,代码不应进入此检查
int p=dateStr.lastIndexOf(“/”);
如果(p==-1){
p=dateStr.lastIndexOf(“-”);
}
String firstSubstring=dateStr.substring(0,p+1);
String secondSubstring=dateStr.substring(p+1);
如果(p!=-1&&secondSubstring.length()在使用模式进行解析之前,通过检查字符串是否“看起来”该模式,可以避免尝试任何不合适的模式
一般做法是:
String datePattern = "yyyy-MM-dd"; // for example
String input;
if (input.matches(datePattern.replaceAll("\\w", "\\d"))) {
// the input looks like the pattern
// in this example "dddd-dd-dd" where "d" is any digit
// so go ahead and try the parse
}
您可以增强此逻辑以添加:
if (input.matches("\\d\\d\\D.*")) {
// then it only has a two digit year, so add "20" to the front
}
if (!dateStr.equals("YYYY-MM-dd")) {
// code
}