ТЛ; др
Instant.parse("2015-02-03T08:37:38.000Z")
.atZone(ZoneId.of("America/Montreal"))
.toLocalDate()
.toString() // 2015-02-03
Использование java.time
Современный способ справиться с дата-время работы является с классами java.time.
Формат входной строки соответствует стандарту ISO 8601. В классах java.time по умолчанию используются форматы ISO 8601 при разборе/генерации строк, которые представляют значения даты и времени. Поэтому нет необходимости указывать шаблон форматирования вообще.
Разберите эту строку как Instant
. Класс Instant
представляет собой момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Instant instant = Instant.parse("2015-02-03T08:37:38.000Z") ;
Для извлечения даты необходимо указать часовой пояс. В любой момент времени по всему миру меняется зона. Например, через мгновение после полуночи в Париже Франция - новый день, еще «вчера» в Монреале, Канада.
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime zdt = instant.atZone(z);
Вы хотите только часть даты без времени суток. Поэтому извлеките LocalDate
. В то время как в LocalDate
отсутствует какая-либо концепция смещения-от-UTC или часового пояса, метод toLocalDate
относится к часовому поясу объекта ZonedDateTime
при определении даты.
LocalDate ld = zdt.toLocalDate();
Вы, кажется, хотите стандарт ISO 8601, YYYY-MM-DD
. Просто позвоните toString
, не указывая шаблон форматирования.
String output = ld.toString();
2015-02-03
О 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.
Какая датаРас вы получаете? –