ТЛ; др
Duration.between(
Instant.parse( "2010-03-15T16:34:46Z" ) ,
Instant.now()
)
.toHoursPart() // returns a `int` integer number.
+ " hours ago"
5 часов назад
java.time
Современный подход использует классы java.time , которые вытесняют проблемные старые унаследованные классы даты и времени.
Instant
Разбор вашей входной строки. Эта строка использует формат, определенный в стандарте ISO 8601. Классы java.time по умолчанию используют эти стандартные форматы при разборе / генерации строк. Поэтому нет необходимости указывать шаблон форматирования.
Instant instant = Instant.parse( "2010-03-15T16:34:46Z" ) ;
Получите наш более поздний момент.
Instant later = instant.now() ; // Capture the current moment in UTC.
Давайте воспользуемся моментом через пять часов.
Instant later = instant.plus( 5L , ChronoUnit.HOURS ) ;
Duration
Представляет истекшее время часов-минут-секунд с Duration
классом.
Duration d = Duration.between( instant , later ) ;
В Java 9 и более поздних версиях звоните to…Part
, чтобы получить каждую часть дней, часов, минут, секунд, наносекунд. Эти методы странным образом отсутствовали в Java 8, но были добавлены в Java 9 и более поздних версиях.
String output = d.toHoursPart() + " hours ago" ;
5 часов назад
ISO 8601 длительность
Вы можете найти строку ISO 8601, совместимую с продолжительностью , сгенерированную Duration::toString
, которая будет полезна: PnYnMnDTnHnMnS
P
отмечает начало. T
отделяет любые годы-месяцы-дни от любых часов-минут-секунд.
Итак, наш приведенный выше пример для пяти часов будет:
PT5H
Такие строки можно анализировать за Duration
часов.
Duration d = Duration.parse( "PT5H" ) ;