2011-01-06 21 views
5

estoy usando la biblioteca Joda para obtener período de tiempo transcurrido desde que una marca de tiempo determinado:Período de tiempo aproximado con la 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); 
    } 

La función devuelve cadenas período de tiempo exacto para las marcas de tiempo dado. Por ejemplo:

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

¿Hay alguna manera de que pueda obtener el tiempo aproximado en lugar de exacto? Por ejemplo, si han transcurrido un minuto y 30 segundos desde el initialTimestamp, solo devuelve 1.5 minutes. Del mismo modo, si han transcurrido una hora y 35 minutos, devuelve about 1.5 hours en lugar de 1 hora, 35 minutos, xy segundos.

Sé que la cadena devuelta se puede analizar y manipular, pero estoy buscando algo más sofisticado.

Respuesta

1

Creo que necesitarás crear tu propio formateador para esto, que mira el período y determina en qué granularidad quieres formatearlo, digamos durante 63 segundos "1 minuto", o durante 3 horas y 48 minutos: "3 horas". Me parece que desea informar solo la unidad de tiempo más grande e ignorar las más granulares. Deberá definir el comportamiento de redondeo y cómo representar los tiempos en días: "hace 44 días" o "hace un mes" o "hace 1 mes y 2 semanas".

No conozco ninguna utilidad genérica que lo haga, pero tampoco he buscado ninguno.

+0

3 horas y 48 minutos deben ser 4 horas, ya que es pase 3:30 (o 3.5) – jmateo

Cuestiones relacionadas