DateUtils.getRelativeTimeSpanString Возвращение форматированной строки даты вместо "Часы / Минуты назад"
У меня возникли серьезные проблемы при попытке получить DateUtils.getRelativeTimeSpanString, чтобы вернуть то, что он должен в Android.
Я рассмотрел все подобные вопросы здесь, и ни одно из опубликованных решений не работает и не имеет отношения к делу.
Вот мой код:
CharSequence relativeDate =
DateUtils.getRelativeTimeSpanString(System.currentTimeMillis(),
currentNewsItem.getTimeInMilliseconds(),
DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);
Метод currentNewsItem.getTimeInMilliseconds действительно возвращает long (например, только что он прошел 1521759734
что кажется правильным), и getRelativeTimeSpanString передает правильно отформатированную строку даты представлению в формате "23 марта 2018 года", чтобы оно знало правильную дату. Но мне нужно, чтобы он пропустил "х часов назад" или "х минут назад", и я не могу понять, почему это не так.
Я проверил время на эмуляторе, и проблема возникает на моем устройстве, поэтому это не настройки часового пояса.
Документация говорит, что она вернется к такой строке даты, если промежуток времени больше 7 дней, но я проверил, сколько времени прошло, как старое время, и сайты конвертеров показывают, что это точное время 4 часа назад. Кроме того, он показывает правильную дату (сегодня), а не часы / минуты назад.
Я попробовал константы HOUR_IN_MILLIS, MINUTES_IN_MILLIS и SECONDS_IN_MILLIS для третьего параметра, и я попытался удалить последний параметр аббревиатуры, и это все тот же результат.
Я пробовал различные сигнатуры публичных методов, чтобы попытаться найти такую, которая могла бы работать, но все они имеют одинаковый результат.
Кто-нибудь сталкивался с этим или кто-то может указать, где я иду не так? Большое спасибо.
1 ответ
Если вы проверите DateUtils.getRelativeTimeSpanString
параметры указаны как:
getRelativeTimeSpanString (long time,
long now,
long minResolution,
int flags)
Однако в вашем коде,
now: текущее время в миллисекундах, передается как 1-й параметр вместо currentNewsItem.getTimeInMilliseconds()
,
Чтобы получить относительное время, как X минут назад, вы можете использовать DateUtils.MINUTE_IN_MILLIS
и флаг как DateUtils.FORMAT_ABBREV_RELATIVE
будет сокращать относительное время как X мин. назад
Итак, вы можете изменить свой код на:
CharSequence relativeDate =
DateUtils.getRelativeTimeSpanString(currentNewsItem.getTimeInMilliseconds(),
System.currentTimeMillis(),
DateUtils.MINUTE_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);