Как я могу преобразовать эту дату в Java? - PullRequest
2 голосов
/ 25 сентября 2010

Я хочу преобразовать:

2010-03-15T16:34:46Z

во что-то вроде "5 часов назад"

Как я могу сделать это на Java?

Ответы [ 4 ]

1 голос
/ 25 сентября 2010

JodaTime поддерживает синтаксический анализ из определенного пользователем формата. См. DateTimeFormatterBuilder и DateTimeBuilder.parseDateTime ().

Если у вас есть DateTime, вы можете создать Duration или Period из этого и текущего времени и использовать другой форматер для приятной печати. [См. Пример PeriodFormatter, на который ссылается BalusC в комментариях выше.]

0 голосов
/ 05 апреля 2018

ТЛ; др

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" ) ;
0 голосов
/ 25 сентября 2010
     Calendar calendar = new GregorianCalendar(2010,Calendar.March,15, 16,34,46);
     calendar.add(Calendar.HOUR,-5);
0 голосов
/ 25 сентября 2010

Я знаю плагин в Jquery для этого: http://plugins.jquery.com/project/CuteTime

Для Java я предполагаю, что вам нужно будет использовать свой мозг :) (Вы можете перевести его на Java)

...