Как я могу преобразовать эту дату в Java?

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

2010-03-15T16:34:46Z

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

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


person Sheehan Alam    schedule 25.09.2010    source источник
comment
Готовы ли вы использовать JodaTime? См. этот ответ для пример. Использование стандартного java.util.Calendar API приведет только к многословному коду и головной боли.   -  person BalusC    schedule 25.09.2010


Ответы (4)


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

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

person Andy Thomas    schedule 25.09.2010
comment
Проект Joda-Time сейчас находится в режиме обслуживания, и команда рекомендует перейти на классы java.time, встроенные в Java 8 и более поздние версии. - person Basil Bourque; 05.04.2018

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

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

person malletjo    schedule 25.09.2010

tl;dr

Duration.between(
    Instant.parse( "2010-03-15T16:34:46Z" ) , 
    Instant.now() 
)     
.toHours()    // returns a `long` integer number. 
+ " hours ago"

5 часов назад

Java.время

В современном подходе используются классы 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

Вы можете найти строку продолжительности, соответствующую стандарту ISO 8601, сгенерированную Duration::toString будет полезно: PnYnMnDTnHnMnS

P отмечает начало. T отделяет любые годы-месяцы-дни от любых часов-минут-секунд.

Таким образом, наш пример выше для пяти часов будет таким:

PT5H

Такие строки можно анализировать за Duration часов.

Duration d = Duration.parse( "PT5H" ) ;
person Basil Bourque    schedule 05.04.2018
comment
Приятно спасибо! Должен ли toHoursPart быть просто toHours? - person Lou Morda; 24.07.2020
comment
@LouMorda Если вы хотите, чтобы вся продолжительность была как одно большое количество часов, позвоните Duration::toHours. Скорее всего, вам понадобится количество общих дней в 24 часа, а также часы, минуты и, возможно, секунды. Если это так, в этом случае сделайте, как я упомянул в ответе, вызовите to…Part метода для каждой из этих частей. Я изменю текст, чтобы сделать это более понятным. Спасибо за вопрос. - person Basil Bourque; 24.07.2020

person    schedule
comment
Вы неверно истолковали вопрос. - person Matthew Flaschen; 25.09.2010