Я хочу преобразовать:
2010-03-15T16:34:46Z
во что-то вроде "5 часов назад"
Как я могу сделать это на Java?
Я хочу преобразовать:
2010-03-15T16:34:46Z
во что-то вроде "5 часов назад"
Как я могу сделать это на Java?
JodaTime поддерживает синтаксический анализ пользовательского формата. См. DateTimeFormatterBuilder и DateTimeBuilder.parseDateTime().
Когда у вас есть DateTime, вы можете создать Duration или Period из этого и текущего времени, а также использовать другой модуль форматирования для красивой печати. [См. пример PeriodFormatter, на который ссылается BalusC в комментариях выше.]
Я знаю плагин в Jquery для этого: http://plugins.jquery.com/project/CuteTime
Я предполагаю, что для Java вам нужно будет использовать свой мозг :) (вы можете перевести его на Java)
Duration.between(
Instant.parse( "2010-03-15T16:34:46Z" ) ,
Instant.now()
)
.toHours() // returns a `long` integer number.
+ " hours ago"
5 часов назад
В современном подходе используются классы 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 ) ;
Если вы хотите указать все прошедшее время как одно большое количество часов, вызовите Duration::toHours
.
String output = d.toHoursPart() + " hours ago" ;
5 часов назад
В Java 9 и более поздних версиях вызовите to…Part
, чтобы получить каждую часть дней, часов, минут, секунд, наносекунд. Эти методы странным образом отсутствовали в Java 8, но были добавлены в Java 9 и более поздних версиях.
long daysPart = d.toDaysPart() ;
int hoursPart = d.toHoursPart() ;
int minutesPart = d.toMinutesPart() ;
String output = … ; // Use the parts to generate your output.
Вы можете найти строку продолжительности, соответствующую стандарту ISO 8601, сгенерированную Duration::toString
будет полезно: PnYnMnDTnHnMnS
P
отмечает начало. T
отделяет любые годы-месяцы-дни от любых часов-минут-секунд.
Таким образом, наш пример выше для пяти часов будет таким:
PT5H
Такие строки можно анализировать за Duration
часов.
Duration d = Duration.parse( "PT5H" ) ;
Duration::toHours
. Скорее всего, вам понадобится количество общих дней в 24 часа, а также часы, минуты и, возможно, секунды. Если это так, в этом случае сделайте, как я упомянул в ответе, вызовите to…Part
метода для каждой из этих частей. Я изменю текст, чтобы сделать это более понятным. Спасибо за вопрос.
- person Basil Bourque; 24.07.2020
java.util.Calendar
API приведет только к многословному коду и головной боли. - person BalusC   schedule 25.09.2010