2011-07-05 8 views
37

Me preguntaba si hay una necesidad de TimeSpan en java.util para que pueda definir cuántas horas, minutos y segundos hay entre estas dos veces.Tenemos una clase de clase TimeSpan en Java

A partir de este TimeSpan podemos tener un intervalo de tiempo entre dos veces. como

TimeSpan getTimeSpan(Date before, Date after){...} 

o

long timeSpan = System.currentTimeMillis(); 
// ... long job 
timeSpan = System.currentTimeMillis() - timeSpan; 

TimeSpan ts = new TimeSpan(timeSpan); 

y con esta TimeSpan podemos utilizarlo en SimpleDateFormat.

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
format.format(timsSpan); 

No estoy seguro si esto ya se ha implementado en Java pero aún no lo he descubierto.

Respuesta

22

Interval de JodaTime va a hacer ..

Un intervalo de tiempo representa un periodo de tiempo entre dos instantes. Los intervalos incluyen el inicio instantáneo y exclusivo del extremo. El instante final siempre es mayor o igual que el instante de inicio.

Los intervalos tienen una duración fija de milisegundos . Esta es la diferencia entre los instantes de inicio y final. La duración se representa por separado por lectura legible. Como resultado, los intervalos no son comparables. Para compare la duración de dos intervalos, , debe comparar sus duraciones.

Un intervalo también se puede convertir a ReadablePeriod. Esto representa la diferencia entre el inicio y el final puntos en términos de campos como años y días.

El intervalo es seguro para hilos e inmutable.

+10

me gusta el '' Interval' de JodaTime'. Pero me pregunto por qué no en la biblioteca estándar aún se ha encontrado esa utilidad. Dado que el uso es muy común. –

+1

Puede ser que el tiempo joda se agregará en la versión estándar de lib pronto –

+2

Esto realmente sucedió, vea mi respuesta a continuación y la documentación que responde esta pregunta aquí: https://docs.oracle.com/javase/8/docs/api/java/ time/Period.html –

2

Si está buscando una versión alternativa más ligera, eche un vistazo a esta biblioteca que escribí para usar en mi propia aplicación de Android. https://github.com/ashokgelal/samaya

Disculpe, no tengo ninguna documentación sobre su uso, pero es muy similar a la clase .Net Timespan homóloga. Además, hay algunas pruebas unitarias que contienen muchos ejemplos sobre cómo usarlo.

+2

segundos intercalares :(http://en.wikipedia.org/wiki/Leap_second – CrashCodes

3

Si tiene Java 8 (o superior) o simplemente no desea importar JodaTime (el autor del propio JodaTime suggest migrating a java).tiempo): Java 8 ofrece esa funcionalidad con Periods, ver aquí para un tutorial: https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

Vamos a citar el tutorial Oracle aquí:

LocalDate today = LocalDate.now(); 
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1); 

Period p = Period.between(birthday, today); 
long p2 = ChronoUnit.DAYS.between(birthday, today); 
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + 
        " months, and " + p.getDays() + 
        " days old. (" + p2 + " days total)"); 

El código produce una salida similar a la siguiente:

You are 53 years, 4 months, and 29 days old. (19508 days total) 
21

En Java 8 se ha agregado una biblioteca de tiempo adecuada a la API estándar (esto se basa en gran medida en JodaTime).

En ella hay dos clases que se pueden utilizar para indicar un período:

  1. Duration que indica un segundo o nanosegundos longitud de un intervalo de tiempo.
  2. Period que indica una diferencia más fácil de usar, almacenada como 'x años y meses, etc.'.

Una explicación detallada de la diferencia entre ellos se puede encontrar en el Java tutorial