Изменить строку на дату с использованием 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 г.

Другие вопросы по тегам