static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss dd/MM/yyyy");
static String timeString = "13:30:45 23/02/2019";
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.parse(timeString,dateTimeFormatter);
LocalDateTime secondTime = LocalDateTime.parse("2007-12-03T10:15:30");
System.out.println(dateTime);
System.out.println(secondTime);
}
Не особо понимаю. В 6 строчке мы парсим дату напрямую, соблюдая формат. Все замечательно, все работает. Однако, если мы туда засунем статическую переменную timeString, выбьет исключение, потому что формат не соответствует.
Хорошо, мы проинициализировали статическую переменную dateTimeFormatter и задали шаблон. И затем в 5 строке вписали в параметры timeString и dateTimeFormatter. И тут все замечательно работает. Но ведь наш шаблон не соответствует шаблону LocalDateTime, почему тогда код проходит?
То есть, задав шаблон у LocalDateTime появилась возможность распознать, какая часть строки год, месяц, час и так далее и в таком случае все работает?
Спасибо!fFamous
51 уровень
Работа метода LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
12 августа 2021, 23:12
ты же видишь разницу в формате между:
и
Логично что на разных форматах метод работает по разному, учитывая что требуется на вход подавать именно первый вариант.
Это есть в описании метода:
The ISO date-time formatter that formats or parses a date-time without an offset, such as '2011-12-03T10:15:30'.
и
То есть документацией четко указано почему проходит один вариант и не проходит второй.
0
Justinian Judge в Mega City One Master
12 августа 2021, 23:12
мне неизвестно, что такое "шаблон LocalDateTime".
В строке LocalDateTime.parse("2007-12-03T10:15:30");
ты вызываешь метод
который принимает дату в текстовом виде в формате DateTimeFormatter.ISO_LOCAL_DATE_TIME. ( 2007-12-03T10:15:30).
В строке LocalDateTime.parse(timeString,dateTimeFormatter); (нету пробела кстати между timeString, и dateTimeFormatter)
ты вызываешь совершенно другой метод:
дату в текстовом виде и в ЛЮБОМ формате + форматтер, который описывает шаблон этой даты. Форматтер может быть каким угодно (в неких рамках).
То есть суть связки "текст + форматтер", что ты скармливаешь дату в удобном тебе формате и прилагаешь форматтер с описание шаблона, и потом в методе происходит парсинг даты согласно шаблону, который ты предоставил.
Ты в метод передал:
13:30:45 23/02/2019
и передал шаблон:
HH:mm:ss dd/MM/yyyy
цель конечная не преобразовать к шаблону 2007-12-03T10:15:30, это просто один из десятков шаблонов. Цель это преобразовать текст в объект типа дату
Вполне валидно отработает.
То есть, этот метод не преобразует в некий универсальный шаблон, этот метод преобразует непосредственно в объект типа LocalDate и LocalTime.
Он ничему не должен соответствовать. Главное чтобы формат даты соответствовал тому шаблону, который ты предоставляешь.
+2
fFamous
13 августа 2021, 00:38
Ясно, спасибо)
0