tl; dr
Используйте современные классы java.time для такой работы.
Duration.between(
Instant.ofEpochMilli( firebaseMillis ) , // Parse count of milliseconds since 1970-01-01T00:00:00Z as a `Instant` object, a moment in UTC.
Instant.now() // Capture the current moment in UTC.
) // Returns a `Duration` object, a span of time unattached to the timeline.
.compareTo( // The `compareTo` method implemented per the `java.lang.Comparable` interface.
Duration.ofHours( 15 ) // Specify your business rule of a fifteen hour limit.
) // Returns an `int`, where zero means equal, over zero means greater-than, and under zero means lesser-than.
> 0 // Asking if our duration is over the limit of 15 hours. Returns a `boolean` primitive.
Обратите внимание, как использование этих классов делает ваш код понятным и более самостоятельным-documenting.
java.time
Хотя я не использую Firebase, поиск в Google указывает, что тип Firebase TIMESTAMP
представляет собой длинное целое число миллисекунд, начиная с эпохи Unix первого момента 1970 года.в UTC, 1970-01-01T00: 00: 00Z.
Современные классы java.time делают эту работу довольно простой.
Считайте количество миллисекунд до Instant
.Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).
Instant then = Instant.ofEpochMilli( firebaseMillis ) ;
Захватить текущий момент в UTC .
Instant now = Instant.now() ;
Кстати, чтобы записать этот Instant
момент, спроситедля подсчета миллисекунд с эпохи Unix .
long millisSinceEpoch = now.toEpochMilli() ;
Определите прошедшее время, представленное как объект Duration
, промежуток времени, не связанный сграфик времени.
Duration d = Duration.between( then , now ) ;
Ваша цель состоит в том, чтобы сравнить этот промежуток времени с целью 15 часов.
Duration limit = Duration.ofHours( 15 ) ;
boolean isOverLimit = ( d.compareTo( limit ) > 0 ) ; // positive means greater-than, zero means equal, and negative means less-than.
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?
- Java SE 8 , Java SE 9 , Java SE 10, а позже
- Встроенный.
- Часть стандартного Java API с встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Android
- Более поздние версии реализации связки Android классов java.time.
- Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .