java.time
Современное решение использует классы java.time .
Получить текущий момент в вашем часовом поясе по умолчанию.Если важно, подтвердите с пользователем.
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Извлечь время суток.
LocalTime lt = zdt.toLocalTime() ;
Если по истечении времени будильника добавить день.
LocalTime alarm = LocalTime.of( 1 , 0 ) ;
LocalDate ld = zdt.toLocalDate() ;
if( ! alarm.isBefore( lt ) ) {
ld = ld.plusDays( 1 ) ;
}
ZonedDateTime fire = ZonedDateTime.of( ld , alarm , z )
Если вашему другому коду требуется UTC, извлеките Instant
Instant instant = fire.toInstant() ;
Рассчитайте истекшее время.
Duration d = Duration.between( zdt , fire ) ;
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
Вы должны добавить немного больше кода,фактор выдумки, если текущий момент чрезвычайно близок ко времени будильника, достаточно близко, чтобы он мог перебить время будильника при выполнении этого кода.
About java.time
Фреймворк java.time встроен в 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 .