getRelativeTimeSpanString () возвращает дату начала, а не время назад - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь рассчитать время между двумя датами и показать разницу во времени в пользовательском интерфейсе как x mins ago, x days ago, x weeks ago и т. Д. (В зависимости от продолжительности времени).

Первая дата - это опубликованная дата, которую мне дает API.Затем я форматирую эту дату в yyyy-MM-dd HH:mm:ss.Вторая дата - текущее время.

val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
val time = sdf.parse("$year-$month-$day $hours").time   // 2019-03-14 13:00:55
val now = System.currentTimeMillis()
val relative = DateUtils.getRelativeTimeSpanString(time, now, 0L, DateUtils.FORMAT_ABBREV_ALL)

Однако, когда я печатаю relative, я получаю Mar 14, когда я ожидаю x months ago.

Не могу сказать, чего мне не хватает, кроме того, что у меня естьгде-нибудь читал, что getRelativeTimeSpanString () работает только в течение 7 дней, но в документации это не указано, поэтому не уверен, что это так?

Любая помощь для решения этой проблемы будет принята!

1 Ответ

0 голосов
/ 08 июля 2019

Это особенность.

У вас минимальное разрешение 0 миллисекунд, и, следовательно, время печатается точно.Не имеет смысла выводить как «16 недель назад 13:00:55».

Вы можете изменить минимальное разрешение на DateUtils.WEEK_IN_MILLIS, чтобы получить вывод как «16 недель назад».

Существует также еще один DateUtils метод , который позволяет указать разрешение перехода:

истекшее время (в миллисекундах), в которое прекращается передача отчетов об относительных измерениях.По истечении времени, превышающего это разрешение, по умолчанию используется обычное форматирование даты.Например, будет переходить с «7 дней назад» на «12 декабря» при использовании WEEK_IN_MILLIS

Теоретически это будет работать, но на практике оно ограничено WEEK_IN_MILLIS.

Под капотом это RelativeDateTimeFormatter делает работу, и вы можете узнать больше, проверив его источник .

Если вам действительно нужно разрешение "несколько месяцев назад", забудьте о DateUtils инакатить свою реализацию.Например, с java.time / API ThreeTenBP: https://stackoverflow.com/a/56450659/101361

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...