Как разобрать LocalDateTime с начальными пробелами?

Я пытаюсь разобрать даты с html-страниц, используя LocalDateTime. И я не мог придумать решение, чтобы пройти следующий тест.

(Используя TestNG) Первая строка всегда терпит неудачу

static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss u");

    @DataProvider(name = "dateTimeFormats")
public Object[][] dateTimeFormats() {
    return new Object[][]{
            {"Mon Jan  5 06:41:07 2015", LocalDateTime.of(2015, 1, 5, 6, 41, 7)},
            {"Sun Jan 25 00:48:23 2015", LocalDateTime.of(2015, 1, 25, 0, 48, 23)},
            {"Mon Aug 14 07:58:00 2006", LocalDateTime.of(2006, 8, 14, 7, 58, 0)}
    };
}

@Test(dataProvider = "dateTimeFormats")
public void testParsePostDateTime(String dateTimeString, LocalDateTime expectedResult) {
    LocalDateTime result = LocalDateTime.parse(dateTimeString, DATE_TIME_FORMATTER);
    assertEquals(result, expectedResult);
}

Любые идеи, какой шаблон даты следует использовать?


person Yurii Bondarenko    schedule 25.01.2015    source источник
comment
каков ваш dateTimeString и ожидаемый результат?   -  person SMA    schedule 25.01.2015
comment
@almasshaikh Когда я пытаюсь проанализировать эту строку, понедельник, 5 января, 06:41:07 2015, я хочу получить этот результат LocalDateTime.of(2015, 1, 5, 6, 41, 7)   -  person Yurii Bondarenko    schedule 25.01.2015
comment
Будет ли слишком сложно вставить dateTimeString.replaceAll(" +", " ")?   -  person Marko Topolnik    schedule 25.01.2015


Ответы (1)


Вы можете использовать шаблон "E MMM ppd HH:mm:ss u". Объяснение p-символа см. в javadoc . Это означает заполнение следующего поля до ширины, поскольку доступно количество p-букв.

person Meno Hochschild    schedule 26.01.2015
comment
Это действительно элегантное решение. Именно то, что я искал. - person Yurii Bondarenko; 26.01.2015
comment
двойной pp перед d кажется нелогичным заполнять только один пробел ‹space›1, ‹space›2, ... может быть, смысл в том, что pp используется два символа, а d - это поле дня месяца? (docs.oracle.com/javase /8/docs/api/java/время/формат/) - person Mariano Paniga; 20.08.2019
comment
@MarianoPaniga Символ p основан на методе построителя padNext(int), аргумент которого (такой же, как количество букв шаблона) определяет всю ширину поля. Таким образом, для двузначного поля требуются две буквы pp. - person Meno Hochschild; 21.08.2019