tl; др
Часы на часах не всегда час.
Использование часового пояса для обработки таких случаев.
Duration
.between(
zonedDateTime_Now ,
zonedDateTime_FirstMomentOfHourLater
)
.toMillis()
Остерегайтесь аномалий
Если вы хотите учесть реальные аномалии во времени настенных часов, используемыеваш предполагаемый часовой пояс, вы должны указать часовой пояс.Это означает использование класса ZonedDateTime
.
Час не всегда час.Например, Северная Корея недавно скорректировала свое смещение от UTC на полчаса .Это означает, что один час будет длиться всего 30 минут во время перестройки.Этот пример Северной Кореи является лишь одним из самых последних примеров.Политики всего мира демонстрируют удивительную склонность к пересмотру своего часового пояса.
Часовой пояс
Укажите правильное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.Никогда не используйте 2-4 буквенные сокращения, такие как EST
или IST
, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
Добавить час.
ZonedDateTime hourLater = now.plusHours( 1 ) ;
Усечь до часа.
ZonedDateTime firstMomentOfNextHour = hourLate.truncatedTo( ChronoUnit.HOURS ) ;
Истекшее время
Рассчитать прошедшее время как Duration
объект.
Duration d = Duration.between( now , firstMomentOfNextHour ) ;
java.time классы используют наносекундное разрешение, но вы просили миллисекунды.Итак, поймите, что в отчетных миллисекундах участвуют потери данных.
long milliseconds = d.toMillis() ;
О java.time
java.time Framework встроен в 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 .