根据字符串选择日期格式

Selecting Date format based on the string

我有 class 从其他 class 接收字符串格式的日期。它现在接收两种不同的格式

格式 1:YYYY_MM_DD

格式 2:EEE MMM dd HH:mm:ss z yyyy

现在我想编写一个方法来接收这个字符串并将其转换为所需的格式,如下所示 'DDMMMYYYY '

你可以尝试暴力解析捕获异常:

编辑:

使用 java8 API(根据您的需要调整格式 need/want)

public   String convertDateFormatJ8(String format) {
    String retFormat = "ddMMyyy";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy_dd_MM][yyyy-MM-dd HH:mm]");
    try {
        LocalDateTime localDate = LocalDateTime.parse(format, formatter);
        return localDate.format(DateTimeFormatter.ofPattern(retFormat));
    } catch (DateTimeParseException ex) {
        System.err.println("impossible to parse to yyyy-MM-dd HH:mm");
    }
    try {
        LocalDate localDate = LocalDate.parse(format, formatter);
        return localDate.format(DateTimeFormatter.ofPattern(retFormat));
    } catch (DateTimeParseException ex) {
        System.err.println("impossible to parse to yyyy_dd_MM");
    }

    return null;

}

旧 java 版本

public String convertDateFormat(String format) {
        DateFormat df1 = new SimpleDateFormat("YYYY_MM_DD");
        DateFormat df2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
        DateFormat dfResult = new SimpleDateFormat("DDMMMYYYY ");
        Date d = null;
        try {
            d = df1.parse(format);
            return dfResult.format(d);
        } catch (ParseException e) {
            System.err.println("impossible to parse to " + "YYYY_MM_DD");
        }
        try {
            d = df2.parse(format);
            return dfResult.format(d);
        } catch (ParseException e) {
            System.err.println("impossible to parse to " + "EEE MMM dd HH:mm:ss z yyyy");
        }
        return null;
    }

如果您提供任何其他无效字符串,则返回的字符串将为空!

您可以使用此方法并在模式中声明可选部分:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy_MM_dd][EEE MMM dd HH:mm:ss Z yyyy]", Locale.ENGLISH);

formatter 将解析两种模式的日期,然后您可以轻松地将其转换为所需格式。

P.S。我已经对其进行了测试,但不确定 EEE MMM dd HH:mm:ss Z yyyy 模板应该解析哪个日期。所以只是玩它并使用 Java 8 种方法(Java 时间)