ТЛ; др
LocalDateTime ldt = LocalDateTime.parse( "2009-08-19 12:00:00".replace( " " , "T" ) );
java.time
Другие ответы верны, но используют устаревшие классы даты и времени. Эти неприятные старые классы были вытеснены классами java.time.
Ваша строка ввода близка к стандартному ISO 8601 формату. Твик, заменив пространство в середине с T
. Затем его можно проанализировать без указания шаблона форматирования. Классы java.time по умолчанию используют ISO 8601 при разборе / генерации строк.
String input = "2009-08-19 12:00:00".replace( " " , "T" );
Входные данные не содержат информации о смещение от UTC или часовом поясе. Таким образом, мы разбираем как LocalDateTime
.
LocalDateTime ldt = LocalDateTime.parse( input );
Если по контексту вы знаете предполагаемое смещение, примените его. Возможно, он был предназначен для UTC (смещение нуля), где мы можем использовать константу ZoneOffset.UTC
.
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );
Или, возможно, вы знаете, что он предназначен для определенного часового пояса. Часовой пояс - это смещение плюс набор правил для обработки аномалий, таких как летнее время (DST).
ZonedDateTime zdt = ldt.atZone( ZoneId.of( "America/Montreal" ) );
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date
, .Calendar
и & java.text.SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений.
Большая часть функциональности java.time перенесена на Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP (см. Как использовать… ).
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time.