Подтвердить что ты не робот

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

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

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

Например,

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

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

4b9b3361

Ответ 1

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

Пример:

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

Ответ 2

 date1.getTime() - date2.getTime() 

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

Ответ 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
 }