Изменить строку на дату с использованием LocalDate в Java
Мне нужно изменить строковую дату ="20160101" на "январь 1,2016" с помощью LocalDate
, Прямо сейчас мой код выглядит так:
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate date = LocalDate.parse("20120403", formatter);
System.out.println(date);
Выход: 2016-01-01
Нужно ли использовать DateTimeFormatterBuilder
сделать это, или есть более простой способ? Спасибо!
3 ответа
LocalDate#toString
Метод печатает дату в формате ISO-8601 uuuu-MM-dd. Вот почему ваш результат приходит как 2016-01-01
, Если вам нужен вывод в формате "январь 1,2016", вам нужно снова отформатировать дату в MMM d, yyyy
формат.
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate date = LocalDate.parse("20120403", formatter);
String strDate = date.format(DateTimeFormatter.ofPattern("MMM d, yyyy"));
System.out.println(strDate);
Вам не нужно использовать строителя. DateTimeFormatter может быть создан непосредственно из строки здесь
Объекты даты и времени не имеют формата
Ваши комментарии указывают на то, что вы объединяете объекты даты и времени со строками, представляющими их значения.
Объекты даты и времени не имеют формата. Объекты могут генерировать строки для представления их значений, но такие строки различны и разделены. Аналогично, объект даты-времени может быть создан путем анализа строки, но новый объект даты будет отличаться и отделяться.
Локализации
Вы можете сгенерировать строку, как показано в Ответе по VHS, где вы указываете определенный шаблон форматирования. Но, как правило, лучший способ - позволить java.time автоматически локализоваться для вас.
Для локализации укажите:
FormatStyle
чтобы определить, насколько длинной или сокращенной должна быть строка.Locale
определить (а) человеческий язык для перевода названия дня, названия месяца и т. д. и (б) культурных норм, решающих вопросы сокращения, использования заглавных букв, пунктуации, разделителей и т. д.
Пример:
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.ITALY, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output = myLocalDate.format( f );
DateTimeFormatterBuilder
класс для особых нужд. Как правило, все, что вам нужно, это DateTimeFormatter
учебный класс.
Посмотрите этот пример кода в прямом эфире на IdeOne.com. Но остерегайтесь ограничений, связанных с реализацией Java этого веб-сайта IdeOne.com: альтернативные локали игнорируются, жестко запрограммированы в одной английской локали (возможно, Locale.US).
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
LocalDate localDate = LocalDate.parse("20120403", formatter);
String outputStandard = localDate.toString();
DateTimeFormatter fCanadaFrench =
DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
.withLocale( Locale.CANADA_FRENCH ) ;
String outputCanadaFrench = localDate.format( fCanadaFrench ) ;
DateTimeFormatter fUS =
DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
.withLocale( Locale.US ) ;
String outputUS = localDate.format( fUS ) ;
localDate.toString (): 2012-04-03
outputCanadaFrench: 3 августа 2012 г.
выходной: 3 апреля 2012 г.