Правильный номер accepted Answer by Jon Skeet. Этот ответ расширяет эти идеи.
Избегайте унаследованное даты и время занятия
Некоторые других ответов, и вопрос, смешайте старые классы наследства даты и время с новым. Это ненужная и плохая практика. Весь смысл классов java.time равен заменить трудными и запутанными старыми классами.
- Вы делаете не нужно
java.util.Date
.
- Вы делаете не необходимо
java.util.Calendar
.
LocalDateTime
Вашей входная строка отсутствует какая-либо информация о офсетном из-UTC или часового пояса. Поэтому мы анализируем его как объект LocalDateTime
.
Для синтаксического анализа мы заменяем ПРОСТРАНСТВО посередине на T
, чтобы соответствовать стандарту ISO 8601 для форматов даты и времени.
String input = "2011-02-18 05:00:00.0".replace(" " , "T");
LocalDateTime ldt = LocalDateTime.parse(input);
LocalTime
Чтобы сосредоточиться на время- день без даты, попросите LocalTime
.
LocalTime lt = ldt.toLocalTime();
ZonedDateTime
Обратите внимание, что ни одно из этого не реальные моменты, а не точка на временной шкале. Без контекста смещения-от-UTC или часового пояса мы не знаем, имело ли значение 5 утра в Окленде или в 5 утра в Калькутте, или в 5 утра в Париже или в 5 утра в Монреале Квебек. Каждый из них будет очень разными моментами времени.
Если по контексту вы точно знаете установленный часовой пояс, примените его. Примените ZoneId
, чтобы получить ZonedDateTime
.
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime zdt = ldt.atZone(z);
Оттуда, попросите LocalTime
при желании.
LocalTime lt = zdt.toLocalTime();
Instant
Если вы хотите увидеть тот же самый момент в UTC, извлечь Instant
. Класс Instant
представляет собой момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Как правило, лучше всего сосредоточиться на UTC в значительной части вашей бизнес-логики, регистрации, хранения данных и обмена данными. Научитесь думать о UTC как «Одно истинное время».
Во-первых, о какой версии Java мы говорим? –
@ RafaelR.S.Robles JDK 1.8 – Stanko