Java вычисляет время между двумя временными метками

Мне нужно рассчитать время, прошедшее между двумя датами.

Уловка здесь заключается в том, что мне нужно показать ее, как YouTube, с отметками времени для комментариев к видео. То есть показать его самой большой мерой.

Например,

  • Если время составляет 50 секунд назад, оно должно сказать 50 секунд назад.
  • Если время больше одной минуты, оно должно сказать минуту назад / десять минут назад и т. Д.
  • Если разница во времени составляет 1 час 30 минут, она должна показать: час назад.
  • Если время составляет полтора недели, а не неделю назад.
  • Если время больше месяца, он должен сказать месяц назад / два месяца назад и т. Д. …
  • И так далее, и так далее..

Итак, каков наилучший способ справиться с этим? Должен ли я использовать метод с case или if который бы возвращал что-то вроде этого? Или есть лучший подход (возможно, библиотека, которая уже делает что-то подобное)?

Solutions Collecting From Web of "Java вычисляет время между двумя временными метками"

Используйте DateUtils.getRelativeTimeSpanString (долгое время, долгое время, длительный minResolution) . time – время начала, и now это время окончания (в миллисекундах). Чтобы сообщить «секунды назад», установите значение minResolution равным нулю.

Пример:

 String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0); // result = "5 seconds ago" 
  date1.getTime() - date2.getTime() 

Это вернет вам время в миллисекундах между двумя датами. Просто преобразуйте это в то, что вы хотите показать (например, часы минут в секундах)

Взгляните на PrettyTime !

Кроме того, каждый раз, когда вы хотите сделать что-то по дате / времени в Java, вы должны взглянуть на Joda Time . Сделайте это сейчас, вы поблагодарите меня позже.

Ваша потребность очень специфична, и я не знаю ни одной библиотеки, которая бы решила проблему для вас из коробки. Однако проблема не очень сложна, и небольшая функция, полная «ifs», должна делать трюк. Конечно, хорошая библиотека даты, такая как Joda Time, поможет вам сохранить ваш код в чистоте. Кто хочет использовать GregorianCalendar !?

Похоже, у вас есть набор пользовательских правил, и алгоритм выбора правила основан на времени в секундах между двумя временными метками. Самый простой подход – обработать правила в ряде операторов 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 }