Java вычисляет время между двумя временными метками
Мне нужно рассчитать время, прошедшее между двумя датами.
Ловушка здесь заключается в том, что мне нужно показать ее, как YouTube, с отметками времени для комментариев к видео. То есть показать его с помощью самой большой меры.
Например,
- если время составляет 50 секунд назад, оно должно сказать 50 секунд назад.
- Если время больше одной минуты, оно должно сказать одну минуту назад/десять минут назад и т.д.
- Если разница во времени составляет 1 час 30 минут, она должна показать: час назад.
- если время составляет полтора недели, а не неделю назад.
- Если время больше месяца, он должен сказать месяц назад/два месяца назад и т.д.
- и т.д. и т.д.
Итак, каков наилучший способ справиться с этим?
Должен ли я сделать метод с операторами case
или if
, которые возвратят что-то вроде этого? Или есть лучший подход (возможно, библиотека, которая уже делает что-то подобное)?
Ответы
Ответ 1
Используйте DateUtils.getRelativeTimeSpanString(долгое время, долгое время, длительный minResolution). time
- время начала, а now
- время окончания (в миллисекундах). Чтобы сообщить "секунды назад", установите значение minResolution равным нулю.
Пример:
String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
// result = "5 seconds ago"
Ответ 2
date1.getTime() - date2.getTime()
Это вернет вам время в миллисекундах между двумя датами. Просто преобразуйте это в то, что вы хотите показать (например, часы в минутах)
Ответ 3
На Android, используйте это: http://developer.android.com/reference/android/text/format/DateUtils.html#getRelativeTimeSpanString%28android.content.Context,%20long,%20boolean%29
Ответ 4
Посмотрите PrettyTime!
Кроме того, каждый раз, когда вы хотите что-то делать с датой и временем в Java, вы должны взглянуть на Joda Time. Сделайте это сейчас, вы поблагодарите меня позже.
Ответ 5
Ваша потребность очень специфична, и я не знаю ни одной библиотеки, которая решила бы проблему для вас из коробки.
Однако проблема не очень сложная, и небольшая функция, полная "ifs", должна делать трюк.
Конечно, хорошая библиотека даты, такая как Joda Time, поможет вам сохранить ваш код в чистоте. Кто хочет использовать GregorianCalendar!?
Ответ 6
Похоже, у вас есть набор пользовательских правил, и алгоритм выбора правила основан на времени в секундах между двумя временными метками. Самый простой подход - обработать правила в ряде операторов if/else if:
private String getTimeAsString(int seconds) {
if (seconds < 60) { // rule 1
return String.format("%s seconds ago", seconds);
} else if (seconds < 3600) { // rule 2
return String.format("%s minutes ago", seconds/60);
} // ... and so on
}