2011-01-06 2 views
5

Я использую библиотеку Joda получить период времени прошло с заданной отметкой времени:Приблизительное время Период с Joda-Time

public static String getTimePassedSince(Date initialTimestamp){ 

     DateTime initDT = new DateTime(initialTimestamp.getTime()); 
     DateTime now = new DateTime(); 
     Period p = new Period(initDT, now); 

     PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .appendYears().appendSuffix(" year, ", " years, ") 
      .appendMonths().appendSuffix(" month, ", " months, ") 
      .appendDays().appendSuffix(" day, ", " days, ") 
      .appendHours().appendSuffix(" hour, ", " hours, ") 
      .appendMinutes().appendSuffix(" minute, ", " minutes, ") 
      .appendSeconds().appendSuffix(" second, ", " seconds") 
      .printZeroNever() 
      .toFormatter(); 

     return formatter.print(p); 
    } 

Функция возвращает точное время периода строки для заданных временных меток. Например:

3 minutes, 23 seconds 
1 hour, 30 minutes, 57 seconds 
1 day, 23 hours, 21 minutes, 19 seconds 

Есть ли способ, которым я могу получить приблизительное время, а не точное? Например, если минута и 30 секунд прошли с initialTimestamp, она возвращает 1.5 minutes. Аналогично, если час и 35 минут прошли, он возвращает about 1.5 hours вместо 1 часа, 35 минут, xy секунд.

Я знаю, что возвращаемая строка может быть проанализирована и обработана, но я ищу что-то более сложное.

ответ

1

Я думаю, вам нужно создать свой собственный форматировщик для этого, который смотрит на период и определяет, какую степень детализации вы хотите отформатировать, скажем, в течение 63 секунд «1 минута» или в течение 3 часов 48 минут: "3 часа". Мне кажется, что вы хотите сообщить только одну большую единицу времени и игнорировать более гранулированные. Вам нужно будет определить поведение округления и как визуализировать время в днях: «44 дня назад» или «месяц назад» или «1 месяц и 2 недели назад».

Мне не известно о какой-либо общей утилите, которая делает это, но я не искал ее.

+0

3 часа и 48 минут должно быть 4 часа, так как это пропуск 3:30 (или 3,5) – jmateo

Смежные вопросы