避免在日期中对YYYY-MM-dd格式进行特定检查

时间:2016-01-29 05:17:25

标签: java date

我有以下方法,其中处理了不同的日期模式

下面的

是现在处理不同日期格式的方法

现在对于特定格式YYYY-MM-dd我不希望它去检查我们在代码前面的前缀20代码请告诉我如何跳过那部分让我们说如果日期模式是YYYY-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;
    }

2 个答案:

答案 0 :(得分:0)

您可以通过在使用模式解析之前检查字符串是否“看起来像”模式来避免尝试任何不适当的模式。

执行此操作的一般方法是:

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
}

答案 1 :(得分:0)

if (!dateStr.equals("YYYY-MM-dd")) {
    // code
}