簡體   English   中英

使用格式為dd.MM.yyyy的Datetime可以解析只有兩位數字年份的字符串?

[英]Using Datetime with format dd.MM.yyyy parses strings with only two digit year?

我需要驗證字符串是否包含有效的日期輸入。 為此,我創建了一個方法

public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) {


    DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat);
    DateTime dt = null;

    try {
        dt = formatter.parseDateTime(dateToValdate);
    } catch (Exception e) {
        log.error("cannot parse {0} to format {1}", dateToValdate, expectedDateFormat);
    }
    if (dt != null) {
        return dt.toDate();
    }
    else {
        return null;
    }       
}

使用這些值時,它不會按預期返回null。 字符串將被轉換為日期時間為0018-12-18T00:00:00.000 + 00:53:28的DateTime,是否可以更改此行為? 雖然格式不正確,但我會失敗。

這是我的測試

@Test
public void checkFormat6() {
    String date = "18.12.18";
    String expectedFormat = "dd.MM.yyyy";       

    assertNull(DateFormatChecker.validateDateFormat(expectedFormat, date));
}

我需要使用JDK 7和joda-time 2.10

Joda Time與yyyyyyy不嚴格匹配。 甚至dMy模式也會將18.12.18解析為有效的日期時間。

您可以使用java.time類(Java 7有一個java.time來獲得更嚴格的模式解析,例如通過設置ResolverStyle.STRICT

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(expectedFormat)
    .withResolverStyle(ResolverStyle.STRICT);

上面的示例中的dd.MM.yyyy將失敗,但仍會讓dMy解析18.12.18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM