TL; др
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern("MM-dd-uuuu")
)
Детали
У меня есть java.util.Date в формате гггг-мм-дд
В другом упоминалось, класс Date
не имеет формата. С начала 1970 года в UTC насчитывается миллисекунд. Безвоздмездно.
java.time
Другие ответы использовать проблемные старые классы наследства даты и время, в настоящее время вытеснены классами java.time.
Если у вас есть java.util.Date
, обращайтесь к объекту Instant
. Класс Instant
представляет момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Instant instant = myUtilDate.toInstant();
Часовой пояс
Другие ответы игнорируют важный вопрос часового пояса. Для определения даты требуется часовой пояс. В любой данный момент дата изменяется по всему миру по зонам. Через несколько минут после полуночи в Париже Франция - новый день, еще «вчера» в Монреале Квебек.
Определите часовой пояс, по которому вы хотите использовать контекст для своего Instant
.
ZoneId z = ZoneId.of("America/Montreal");
Нанести ZoneId
получить ZonedDateTime
.
ZonedDateTime zdt = instant.atZone(z);
LocalDate
Если вы заботитесь только о дате без дня времени из-, извлечь LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Для создания строки в стандартном формате ISO 8601, YYYY-MM-DD, просто вызовите toString
. Классы java.time по умолчанию используют стандартные форматы при генерации/синтаксическом анализе строк.
String output = localDate.toString();
2017-01-23
Если вы хотите формат ДД-ММ-ГГГГ, определяют шаблон форматирования.
DateTimeFormatter f = DateTimeFormatter.ofPattern("MM-dd-uuuu");
String output = localDate.format(f);
Обратите внимание, что коды шаблонов форматирования чувствительны к регистру. Код в Вопросе неправильно используется mm
(минута часа), а не MM
(месяц года).
Используйте тот же объект DateTimeFormatter
для разбора. Классы java.time являются потокобезопасными, поэтому вы можете поддерживать этот объект и повторно использовать его даже по потокам.
LocalDate localDate = LocalDate.parse("01-23-2017" , f);
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые классы legacy, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, теперь в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time.Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Что вы имеете в виду, когда говорите .. У меня есть java.util.Date в формате yyyy-mm-dd? – Jayamohan
Это означает, что нынешний формат в моем коде для отображения его в пользовательском интерфейсе - 'yyyy-mm-dd'. – user182944
Пожалуйста, измените малый миллиметр на MM – Dilip