ТЛ; др
LocalDateTime ldt = LocalDateTime.of(
LocalDate.parse(
"11/12/2011" ,
DateTimeFormatter.ofPattern( "mm/DD/uuuu" )
)
,
LocalTime.parse(
"0200" ,
DateTimeFormatter.ofPattern( "HHmm" )
)
)
24-часовые часы это «нормальный»
Нет такого понятия, как "нормальное время" и "военное время". Большинство людей на планете свободно владеют как 12-часовым, так и 24-часовым временем для важных дел, таких как расписание поездов. Термин «военное время» в основном используется в Соединенных Штатах, где, как ни странно, мало кто за пределами армии знает круглосуточное время.
Избегайте устаревших классов даты и времени
Избегайте проблемных старых классов даты и времени, таких как java.util.Date
и .Calendar
. Теперь вытеснены классами java.time .
У вас есть значение только для даты и значение времени дня, и вы хотите объединить их. Итак, сначала установите каждую часть.
Класс LocalDate
представляет значение только для даты без времени суток и без часового пояса. Точно так же класс LocalTime
представляет время суток без даты и без часового пояса.
LocalDate
Вы можете указать явный шаблон форматирования.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "mm/DD/uuuu" ).withLocale( Locale.US );
LocalDate ld = LocalDate.parse( "11/12/2011" , dateFormatter );
ld.toString (): 2011-01-12
LocalTime
И сделать то же самое для времени суток.
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern( "HHmm" );
LocalTime lt = LocalTime.parse( "0200" , timeFormatter );
lt.toString (): 02: 00
LocalDateTime
Соедините эти две части в LocalDateTime
.
LocalDateTime ldt = LocalDateTime.of( ld , lt );
LocalDateTime
не представляет фактический момент, точку на временной шкале. Этот объект не имеет реального значения без контекста смещения от UTC или часового пояса. Момент времени 2 часа ночи в Окленде, Новая Зеландия, - это часы на 2 часа утра в Калькутте, который на два часа раньше, чем 2 часа ночи в Париже, и еще позже - 2 часа ночи в Монреале, Квебеке, Калифорния.
Из LocalDateTime
вы можете извлечь LocalDate
или LocalTime
, когда вы снова захотите указать значение только для даты или времени дня, как указано в вопросе.
LocalDate ld = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
ZonedDateTime
Если вам известно смещение от UTC , предназначенное для этого значения, примените ZoneOffset
, чтобы получить OffsetDateTime
. Еще лучше использовать часовой пояс , если известен, ZonedId
, чтобы получить ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2011-01-12T02: 00: 00-05: 00 [Америка / Монреаль]
Из ZonedDateTime
вы можете извлечь LocalDate
или LocalTime
, когда вам снова понадобится значение только для даты или времени дня, как было запрошено в вопросе.
LocalDate ld = zdt.toLocalDate();
LocalTime lt = zdt.toLocalTime();
Преобразование
Лучше всего избегать java.util.Date
как Чума. Но если вам нужно работать со старым кодом, который еще не обновлен до типов java.time, вы можете преобразовать его в / из java.time, вызвав новые методы, добавленные к старым классам. Из ZonedDateTime
вы можете извлечь java.time.Instant
(момент на временной шкале в UTC) и передать его статическому методу на Date
.
java.util.Date utilDate = java.util.Date.from( zdt.toInstant() );
Для получения дополнительной информации о преобразовании см. Преобразовать java.util.Date для какого типа «java.time»? .
О 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. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .