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 з дозволом наносекунд (до дев'яти (9) цифр десяткового дробу).
Instant instant = myUtilDate.toInstant();
Часовий пояс
Інші відповіді ігнорують вирішальне питання часового поясу. Визначення дати вимагає часового поясу. У будь-який даний момент дата змінюється по всьому світу в залежності від зони. Кілька хвилин після півночі у Парижі, Франція - це новий день, ще “вчора” у Монреалі в Квебеку.
Визначте часовий пояс, за яким ви хочете контекст для вашого Instant.
ZoneId z = ZoneId.of( "America/Montreal" );
Застосуйте, ZoneIdщоб отримати ZonedDateTime.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Якщо вам важлива лише дата без часу доби, витягніть a LocalDate.
LocalDate localDate = zdt.toLocalDate();
Щоб згенерувати рядок у стандартному форматі ISO 8601, РРРР-ММ-ДД, просто зателефонуйте toString. Класи java.time використовують стандартні формати за замовчуванням при генерації / аналізі рядків.
String output = localDate.toString();
23.01.2017
Якщо вам потрібен формат MM-DD-YYYY, визначте шаблон форматування.
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 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і SimpleDateFormat.
Проект Joda-Time , який зараз перебуває в режимі обслуговування , радить перейти на класи java.time .
Щоб дізнатись більше, див. Підручник Oracle . І шукайте в 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, і більш .