public static Date parse()

in dubbo-common/src/main/java/org/apache/dubbo/common/utils/DateUtils.java [139:237]


    public static Date parse(String value) {
        if (value == null) {
            return null;
        }
        String str = value.trim();
        int len = str.length();
        if (len == 0) {
            return null;
        }

        boolean isIso = true;
        boolean isNumeric = true;
        boolean hasDate = false;
        boolean hasTime = false;
        for (int i = 0; i < len; i++) {
            char c = str.charAt(i);
            switch (c) {
                case ' ':
                    isIso = false;
                    break;
                case '-':
                    hasDate = true;
                    break;
                case 'T':
                case ':':
                    hasTime = true;
                    break;
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    continue;
                default:
            }
            if (isNumeric) {
                isNumeric = false;
            }
        }
        DateTimeFormatter formatter = null;
        if (isIso) {
            if (hasDate) {
                formatter = hasTime ? DateTimeFormatter.ISO_DATE_TIME : DateTimeFormatter.ISO_DATE;
            } else if (hasTime) {
                formatter = DateTimeFormatter.ISO_TIME;
            }
        }
        if (isNumeric) {
            long num = Long.parseLong(str);
            if (num > 21000101 || num < 19700101) {
                return new Date(num);
            }
            formatter = DateTimeFormatter.BASIC_ISO_DATE;
        }
        switch (len) {
            case 10:
                formatter = DATE_FORMAT;
                break;
            case 16:
                formatter = DATE_MIN_FORMAT;
                break;
            case 19:
                formatter = DATE_TIME_FORMAT;
                break;
            case 23:
            case 24:
                formatter = ASC_TIME_FORMAT;
                break;
            case 27:
                formatter = RFC1036_FORMAT;
                break;
            case 28:
                formatter = JDK_TIME_FORMAT;
                break;
            case 29:
                formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
                break;
            default:
        }

        if (formatter != null) {
            try {
                return toDate(formatter.parse(str));
            } catch (Exception ignored) {
            }
        }
        for (DateTimeFormatter dtf : CUSTOM_FORMATTERS) {
            try {
                return parse(str, dtf);
            } catch (Exception ignored) {
            }
        }
        throw new IllegalArgumentException("Can not cast to Date, value : '" + value + "'");
    }