2011-05-30 17 views
12

Necesito calcular el tiempo transcurrido entre dos fechas.java calcular el tiempo entre dos marcas de tiempo

El problema aquí es que tengo que mostrarlo como lo hace YouTube con sus marcas de tiempo de comentarios de video. Es decir, mostrarlo solo con la medida más grande.

Por ejemplo,

  • si el tiempo es de hace 50 segundos que debe decir hace 50 segundos.
  • si el tiempo es más de un minuto, debería decir hace un minuto/diez minutos, etc.
  • si la diferencia horaria es de 1 hora y 30 minutos debería aparecer: hace una hora.
  • si el tiempo es una semana y media de lo que debería decir hace una semana.
  • si el tiempo es más de un mes que debería decir hace un mes/hace dos meses, etc ...
  • y así sucesivamente y así sucesivamente ..

Entonces, ¿cuál es la mejor manera de manejar ¿esta? ¿Debo hacer un método con case o if declaraciones que devolvería algo como esto? ¿O hay un mejor enfoque (tal vez una biblioteca que ya hace algo parecido)?

Respuesta

35

Use DateUtils.getRelativeTimeSpanString(long time, long now, long minResolution). time es la hora de inicio y now es la hora de finalización (en milisegundos). Para informar "segundos atrás", establezca minResolution en cero.

Ejemplo:

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

esto funcionó perfectamente gracias. – DArkO

+3

Respuesta perfecta, pero el tipo de devolución es ** CharSequence **, no ** String **. Entonces, cambie el ** resultado ** tipo a ** CharSequence **, o tipee el yeso. – Touhid

+0

¿cómo obtengo el número de días entre dos marcas de tiempo? –

4
date1.getTime() - date2.getTime() 

Esto le devolverá el tiempo en milisegundos entre las 2 fechas. Simplemente conviértalo en lo que quieras mostrar (por ejemplo, horas, minutos, segundos)

+0

bien esto sé cómo hacerlo ... esto me da tiempo en milisegundos y no en el formato en el que quiero crearlo ... Mi pregunta era sobre cómo proceder para obtener el resultado descrito en mi pregunta. cuál es la forma correcta/más simple de hacerlo ... – DArkO

2

¡Echa un vistazo a PrettyTime!

Además, cada vez que quieras hacer algo relacionado con la fecha/hora en Java, deberías echarle un vistazo al Joda Time. Hazlo ahora, me lo agradecerás más tarde.

-1

parece que tiene un conjunto de reglas personalizadas y el algoritmo para elegir una regla se basa en el tiempo en segundos entre dos marcas de tiempo . El método más sencillo es para manejar las reglas en una serie de 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 
} 
0

su necesidad es muy específica, y yo no conozco a ningún lib que resolvería el problema para usted de la caja. Sin embargo, el problema no es muy complejo y una pequeña función llena de "si" debería hacer el truco. Por supuesto, una buena biblioteca de fechas como Joda Time te ayudará a mantener tu código limpio. ¿Quién quiere usar GregorianCalendar?

Cuestiones relacionadas