Java рассчитать время между двумя метками времени - PullRequest
15 голосов
/ 30 мая 2011

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

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

Например,

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

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

Ответы [ 6 ]

40 голосов
/ 30 мая 2011

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

Пример:

String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
// result = "5 seconds ago"
4 голосов
/ 30 мая 2011
 date1.getTime() - date2.getTime() 

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

3 голосов
/ 30 мая 2011
2 голосов
/ 30 мая 2011

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

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

0 голосов
/ 30 мая 2011

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

0 голосов
/ 30 мая 2011

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