Necesito calcular el tiempo transcurrido entre dos fechas.

El problema es que necesito mostrar como YouTube hace con sus comentarios de vídeo marcas de tiempo. Es decir, para mostrar que tan sólo por la mayor medida.

Por ejemplo,

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

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

OriginalEl autor DArkO | 2011-05-30

6 Comentarios

  1. 39

    Uso DateUtils.getRelativeTimeSpanString(mucho tiempo, tiempo, tiempo minResolution). time es la hora de inicio, y now es el fin del tiempo (en milisegundos). Informe «hace segundos,» conjunto de minResolution a cero.

    Ejemplo:

    String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0);
    //result = "5 seconds ago"
    esto funcionó perfectamente, gracias.
    La respuesta perfecta, pero el tipo de devolución es de CharSequence, no Cadena. Así que, o bien cambiar el resultado tipo CharSequence, o el tipo de fundición.
    ¿cómo puedo obtener el número de días entre dos marcas de tiempo ?
    La respuesta perfecta!
    Gracias. Sólo me salvó de hacer un montón de trabajo

    OriginalEl autor user775598

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

    Esto hará que regrese el tiempo en milisegundos entre las 2 fechas. Acaba de convertir en lo que quieras mostrar (por ejemplo, horas, minutos, segundos)

    ok esto es lo que sé cómo hacer… esto me pone el tiempo en milisegundos y no en el formato que quiero crear en… Mi pregunta era acerca de cómo proceder para obtener el resultado descrito en mi pregunta. ¿qué es el derecho/de la manera más sencilla de hacerlo…

    OriginalEl autor RMT

  3. 2

    Echa un vistazo a PrettyTime!

    También, cada vez que quiero hacer algo de fecha/tiempo en Java, usted debe echar un vistazo a Joda Tiempo. Hacerlo ahora, gracias a mí más tarde.

    OriginalEl autor Pål Brattberg

  4. 0

    Su necesidad es muy específico, y yo no conozco a ninguna lib que podría resolver el problema para usted fuera de la caja.
    Sin embargo, el problema no es muy complejo y una pequeña función completa de «ifs» debe hacer el truco.
    Por supuesto, una buena fecha la biblioteca como Joda el Tiempo le ayudará a mantener el código limpio. Quien quiera usar GregorianCalendar!?

    OriginalEl autor solendil

  5. -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 fácil es manejar la 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
     }

    OriginalEl autor Andreas_D

Dejar respuesta

Please enter your comment!
Please enter your name here