ТЛ; др
OffsetDateTime.parse( "2010-03-01T00:00:00-08:00" )
Подробнее
Ответ от BalusC правильный, но теперь устарел с Java 8.
java.time
Фреймворк java.time является преемником как библиотеки Joda-Time, так и старых проблемных классов даты и времени, связанных с ранними версиями Java (java.util.Date/.Calendar & java. text.SimpleDateFormat).
ISO 8601
Ваша строка входных данных соответствует стандарту ISO 8601 .
Классы java.time по умолчанию используют форматы ISO 8601 при разборе / генерации текстовых представлений значений даты и времени. Поэтому нет необходимости определять шаблон форматирования.
OffsetDateTime
Класс OffsetDateTime
представляет момент на временной шкале, скорректированный до некоторого определенного смещения от UTC . По вашим данным, смещение составляет 8 часов после UTC, обычно используется на большей части западного побережья Северной Америки.
OffsetDateTime odt = OffsetDateTime.parse( "2010-03-01T00:00:00-08:00" );
Похоже, вам нужна только дата, в этом случае используйте класс LocalDate
. Но имейте в виду, что вы отбрасываете данные, (а) время суток и (б) часовой пояс. Действительно, дата не имеет смысла без контекста часового пояса . В любой данный момент дата меняется по всему миру. Например, сразу после полуночи в Париже все еще «вчерашний день» в Монреале. Поэтому, хотя я предлагаю придерживаться значений даты и времени, вы можете легко конвертировать в LocalDate
, если вы настаиваете.
LocalDate localDate = odt.toLocalDate();
часовой пояс
Если вы знаете предполагаемый часовой пояс, примените его. Часовой пояс - это смещение плюс правил, используемых для обработки аномалий, таких как Летнее время (DST) . Применение ZoneId
дает нам объект ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Los_Angeles" );
ZonedDateTime zdt = odt.atZoneSameInstant( zoneId );
Генерация строк
Чтобы сгенерировать строку в формате ISO 8601, позвоните toString
.
String output = odt.toString();
Если вам нужны строки в других форматах, найдите переполнение стека для использования пакета java.util.format .
Преобразование в java.util.Date
Лучше всего избегать java.util.Date
, но при необходимости вы можете конвертировать. Вызовите новые методы, добавленные к старым классам, например java.util.Date.from
, где вы передаете Instant
. Instant
- это момент на временной шкале в UTC . Мы можем извлечь Instant
из нашего OffsetDateTime
.
java.util.Date utilDate = java.util.Date( odt.toInstant() );
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .