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
, і більш .