java.time
Ответ Джона Скита правильный, но сейчас устарел.
Как он сказал, старые унаследованные классы даты и времени - беспорядок, и его следует избегать. Проект Joda-Time в настоящее время находится в режиме обслуживания, и команда советует перейти на java.time.
LocalDateTime
Класс LocalDateTime
представляет дату и время суток с разрешением наносекунд. Это значение не привязано к временной шкале без какой-либо концепции смещение от UTC и часового пояса.
Таким образом, не представляет фактический момент, но потенциальный момент. Когда вы помещаете его в контекст смещения или часового пояса, вы наполняете новое значение (OffsetDateTime
или ZonedDateTime
) значением, которое становится точкой на график времени.
Например, 2016-12-25T00:00:00
- это когда Рождество начинается в этом году. Но этот полуночный инсульт случается первым в Тихом океане, например, в Окленде, Новая Зеландия, то есть раньше Рождества в Калькутте, Индии . А Рождество начинается еще позже, в 1036 году, в Париже, во Франции, в 1037 году, еще позже, в 1038 году, в Монреале, Квебеке. Вот почему Санта начинается на востоке и работает на запад со своими поставками.
LocalDateTime xmas2016 = LocalDateTime.of( 2016 , Month.DECEMBER , 25 , 0 , 0 ) ;
Зонная
Хотя ваш Вопрос неясен, я подозреваю, что вам действительно нужны значения даты и времени в UTC. Все ваши различные входы в разных часовых поясах должны быть нормализованы в UTC.
Программисты должны думать о UTC как о One True Time . Большая часть вашей бизнес-логики, ведения журналов, хранения данных и обмена данными, как правило, должна выполняться в UTC. Я предлагаю вам оставить на вашем столе вторые часы в формате UTC.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд .
Instant instant = Instant.now();
Когда вам нужно посмотреть время настенных часов для некоторого смещения от UTC , примените ZoneOffset
, чтобы получить OffsetDateTime
объект. Чтобы увидеть время на часах для некоторого часового пояса , примените ZoneId
, чтобы получить ZonedDateTime
.
ZonedDateTime xmas2016Montréal = xmas2016.atZone( ZoneId.of( "America/Montreal" ) );
Оба этих смещенных / зональных объекта даты и времени могут вернуть вас к Instant
с вызовом toInstant
.
Instant instant = xmas2016Montréal.toInstant(); // Convert to UTC.
О 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 .