package ua.javarush.task.pro.task16.task1621;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/*
Напиши шаблон
*/
public class Solution {
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);
System.out.println(dateTime);
}
}
Василь
30 рівень
Таке запитання: ми надали шаблон, за яким треба виводити дату/час, а в консоль виводиться спочатку час, потім дата, чому так?
Відповідь знайдено
Коментарі (6)
- популярні
- нові
- старі
Щоб залишити коментар,
потрібно ввійти в систему
Anonymous #3303140
23 жовтня 2023, 11:22
Не понял, почему ты говоришь, что в консоль выводится сначала время. Наоборот, в консоль выводится следующая строка:
Это стандартное строковое представление объекта LocalDateTime (LocalDateTime.toString())
Ты своим форматтером никак не форматируешь полученную дату, ты его используешь только в качестве парсера, который получает из исходной строки объект LocalDateTime.
Ты скажи, что хотел сделать-то? 0
Василь
trainee в Kindgeek
23 жовтня 2023, 11:36
у 12 і 13 рядку у нас спочатку йде час, а потім дата. Саме це мав на увазі
0
Anonymous #3303140
23 жовтня 2023, 11:47
Именно это тебе позволило распознать в строке 13 дату при помощи парсера. А потом ты эту дату (объект LocalDateTime) вывел в консоль.
Форматтером можно делать две вещи: парсить (то есть выполнять синтаксический анализ) имеющуюся строку и преобразовывать её в объект, и, собственно, фомартировать, т.е. выполнять обратное действие по превращению объекта в строку. И для того и для другого будет использоваться шаблон, который есть у форматтера.
Ты использовал форматтер только для парсинга объекта, то есть у тебя была некоторая строка и ты сказал, где в этой строке искать часы, где минуты и т.д. Так ты создал объект даты. Дальше ты мог эту строку форматировать в любой необходимый для тебя вид. Для этого тебе нужен был бы второй форматтер со вторым шаблоном, который ты бы использовал для того, чтобы сказать, в каком порядке и какие компоненты даты ты хочешь вывести в консоль. Вместо этого, ты преобразовал дату в строку не при помощи форматтера (DateTimeFormatter.format()), а при помощи LocalDateTime.toString(), поскольку ты передал в println сам объект класса LocalDateTime.
Если бы ты, например использовал тот же самый форматтер для преобразования даты обратно в строку, то получил бы дату в исходном виде:
Но в этом бы не было особого смысла, поскольку parse и format - это два противоположных действия, и результат заранее известен. В этом случае можно было бы просто сразу вывести объект timeString без всяких преобразований. 0
Василь
trainee в Kindgeek
23 жовтня 2023, 11:54
Дякую за детальне роз'яснення, я це приблизно так і розумів, але з толку збиває що у 12 і 13 рядку вказується спочатку час, а потім дата, а після парсингу вивід в консоль дає навпаки, спочатку дату, а потім час (за стандартом). Я так розумію, що якби ми у 12 і 13 рядку написали спочатку дату, а потім час це б не вплинуло на вивід в консоль?
0
Anonymous #3303140
23 жовтня 2023, 11:57розв'язання
Вот так бы это выглядело, если бы тебе требовалось, преобразовать из одного формата в другой.
Что от тебя требуется по условию я не знаю, но ты можешь использовать это как пример. Вместо DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM) ты мог бы создать свой форматтер с любыми компонентами даты, используя общий метод ofPattern() либо с помощью DateTimeFormatterBuilder
Отвечая на твой вопрос: ты прав, это бы никак не повлияло на вывод. 12 и 13 строки должны соотноситься между собой для того, чтобы можно было создать дату. Дальше твой форматтер никак не используется. Думаю, пример выше даст ответы на остальные твои вопросы. +2
Василь
trainee в Kindgeek
23 жовтня 2023, 12:01
В задачі цього не вимагали, цим питанням я задався після вирішення, так як звернув увагу на цей нюанс, як по мені, то невідповідність в порядку написання і виводу в консоль трошки збиває. Але ти відповів на моє запитання, а саме: не важливо що за чим йде, вивід буде згідно стандартам до тих пір поки ми не перепишемо так як нам треба.
Дякую!
0