Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免对日期中的YYYY-MM--dd格式进行特殊检查_Java_Date - Fatal编程技术网

Java 避免对日期中的YYYY-MM--dd格式进行特殊检查

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

我在下面介绍了处理不同日期模式的方法

下面是处理不同日期格式的方法

现在,对于特定格式YYYY-MM-dd,我不想让它去检查我们在代码中前面加前缀20的位置。请建议我如何跳过这一部分。假设日期模式是yyy-MM-dd,那么就避免在年份前面加前缀20的逻辑

下面是我的代码

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
}