Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Java 8 – Duration

La clase Duration puede contener cantidad de tiempo en términos de segundos y nanosegundos. Se puede acceder a él utilizando otras unidades basadas en la duración, como minutos y horas. Además, la unidad DÍAS se puede utilizar y se trata exactamente igual a 24 horas.

from(), of(), ofDays(),ofHours(),ofMillis(), ofMinutes(), ofNanos(), ofSeconds()

public static Duration from(TemporalAmount amount)
public static Duration of(long amount, TemporalUnit unit)
public static Duration ofDays(long days)
public static Duration ofHours(long hours)
public static Duration ofMillis(long millis)
public static Duration ofMinutes(long minutes)
public static Duration ofNanos(long nanos)
public static Duration ofSeconds(long seconds)
public static Duration ofSeconds(long seconds, long nanoAdjustment)

Obtiene un objeto Duration con el valor indicado en el Temporal o según la función utilizada

El caso especial es la funcion from que crea el objeto copiando el anterior, en el ejemplo vemos como se crean estos objetos

public static void main(String[] args) {
		// Obtener Duration desde numero de dias
		Duration ej = Duration.ofDays(5); // 5 dias
		Duration ddias = Duration.from(ej); // lo mismo que ej
		Duration unDia = Duration.of(24, ChronoUnit.HOURS);

		System.out.println(ej);
		System.out.println(ddias);
		System.out.println(unDia);
	}

Lo que nos aparecerá en la consola son las representaciones string de esas duraciones

getUnits()

public List<TemporalUnit> getUnits()

Nos obtiene la lista de unidades compatibles con este Duration

En el ejemplo, vemos que solo podemos trabajas con segundos y con nanosegundos

public static void main(String[] args) {
		
		Duration ej = Duration.ofDays(5);
		List<TemporalUnit> a =	ej.getUnits();
		a.forEach(valor -> {
			System.out.println((valor + "      ").substring(0,10) 
                                            + " \t-" + valor.getDuration());
		});
		           
	}

En la consola, nos aparecerá la lista

addTo(), subtractFrom()

public Temporal	addTo(Temporal temporal)
public Temporal	subtractFrom(Temporal temporal)

Obtiene un Temporal que representa el valor del Duration, despues de sumar o restar un temporal dado

En ejemplo expuesto, se consigue la hora actual y se calcula la hora que era 3 horas antes y tres horas después, utilizando un objeto Duration con ese valor.

public static void main(String[] args) {
		
		LocalTime now = LocalTime.now();
		Duration h1 = Duration.ofHours(3);
		
		LocalTime antes = (LocalTime)h1.subtractFrom(now);
		LocalTime despues = (LocalTime)h1.addTo(now);
		
		System.out.println("Ahora  :" + now);
		System.out.println("Antes  :" + antes);
		System.out.println("Despues:" + despues);
	}

Los calores que apareceran en consola son:

between()

public static Duration	between(Temporal startInclusive, Temporal endExclusive)

Obtiene la duración o distancia de tiempo que existe entre los dos temporales

En el ejemplo, queremos calcular las horas transcurridas del dia, con lo cual, establecemos la distancia entre LocalTime.MIN que representa 00:00:00 y la hora actual

public static void main(String[] args) {
		
		LocalTime ini = LocalTime.MIN;
		LocalTime now = LocalTime.now();
		
		Duration d1 = Duration.between(ini, now);
		System.out.println(d1);
	}

El resultado que aparece en consola, dependiendo el momento en que se haga esta prueba, es

compareTo()

public int compareTo(Duration otherDuration)

Compara dos duraciones de tiempo

En este ejemplo, hemos utilizado el compare para determinar si estamos en la mañana (antes de las 12:00) o en la tarde. Si, hay otras formas, pero queríamos ver como funciona el compareTo, luego establecemos las duraciones desde las 00:00 hasta el momento actual, y entre el momento actual y las 24

La comparación dará -1, por la mañana, 0 al mediodía, y 1 por la tarde

public static void main(String[] args) {

    LocalTime ini = LocalTime.MIN;
    LocalTime now = LocalTime.now();
    LocalTime fin = LocalTime.MAX;

    Duration di = Duration.between(ini, now);
    Duration df = Duration.between(now, fin);
    int c = di.compareTo(df);

    System.out.println(di);
    System.out.println(df);
    System.out.println(c);
}

Los resultados, dependen de la hora del dia; a mi me ha dado:

divideBy(), multiplyBy

public Duration dividedBy(long divisor)
public Duration	multipliedBy(long multiplicand)

Devuelve una copia de la duración, dividida o multiplicada por el valor indicado

En el ejemplo, hemos obtenido un Duration de 12 horas, en base a ese, hemos conseguido el de 6 horas y el de 24 horas, multiplicándolo y dividiéndolo por 2

public static void main(String[] args) {
		
		Duration base = Duration.ofHours(12);
		Duration mitad = base.dividedBy(2);
		Duration doble = base.multipliedBy(2);
		
		System.out.println("Base :" + base);
		System.out.println("Mitad:" + mitad);
		System.out.println("Doble:" + doble);
	}

La salida que tenemos es:

equals()

public boolean equals(Object otherDuration)

Compara dos tiempos, para ver si son iguales

En este caso calculo las distancias a inicio y fin del dia, y las comparo por igual. El true solo lo conseguiré a las 12:00, pero… también se puede hacer así.

public static void main(String[] args) {
		
		LocalTime ini = LocalTime.MIN;
		LocalTime now = LocalTime.now();
		LocalTime fin = LocalTime.MAX;
		
		Duration di = Duration.between(ini, now);
		Duration df = Duration.between(now, fin);
		boolean c = di.equals(df);
		
		System.out.println(di);
		System.out.println(df);
		System.out.println(c);
	}

Y, el resultado previsto es:

get(), getNano(), getSeconds()

public long get(TemporalUnit unit)

Obtiene el valor en la unidad indicada

public int getNano()

Obtiene la duración en nanosegundos

public long getSeconds()

Obtiene la duración en segundos

El ejemplo presenta la obtención de la duración de un objeto de varias formas

public static void main(String[] args) {
		//Obtener Duration desde numero de dias
		Duration ej = Duration.ofHours(1);		//1 hora
		
		System.out.println(ej.get(ChronoUnit.SECONDS));
		System.out.println(ej.getSeconds());
		

	}

Con la salida

plus(), plusDays(), plusHours(), plusMilis(), plusMinutes(), plusNanos(), plusSeconds()

public Duration plus(Duration duration)
public Duration plus(long amountToAdd, TemporalUnit unit)
public Duration plusDays(long daysToAdd)
public Duration plusHours(long hoursToAdd)
public Duration plusMillis(long millisToAdd)
public Duration plusMinutes(long minutesToAdd)
public Duration plusNanos(long nanosToAdd)
public Duration plusSeconds(long secondsToAdd)

Devuelve una copia de un objeto Duration sumándole al objeto actual la cantidad de tiempo facilitada

En el ejemplo, creamos un objeto Duración de 600 segundos(10 minutos), y vamos sumandoles distintas cantidades, con diferentes módulos.

public static void main(String[] args) {
		//Obtener Duration desde numero de dias
		Duration ej = Duration.ofMinutes(10);		//10 minutos
		System.out.println(ej.getSeconds());
		
		Duration mi20 = Duration.ofMinutes(20);
		System.out.println(mi20.getSeconds());
		
		Duration mi40 = ej.plus(mi20);
		System.out.println(mi40.getSeconds());
		
		Duration mi50 = mi40.plusMinutes(10);
		System.out.println(mi50.getSeconds());
		
	}

Los resultados en segundos son

minus(), minusDays(), minusHours(), minusMillis(), minusMinutes(), minusNanos(), minusSeconds

public Duration	minus(Duration duration)
public Duration minus(long amountToSubtract, TemporalUnit unit)
public Duration	minusDays(long daysToSubtract)
public Duration	minusHours(long hoursToSubtract)
public Duration	minusMillis(long millisToSubtract)
public Duration	minusMinutes(long minutesToSubtract)
public Duration	minusNanos(long nanosToSubtract)
public Duration	minusSeconds(long secondsToSubtract)

Devuelve una copia de un objeto Duration restandole al objeto actual la cantidad de tiempo facilitada

En el ejemplo, creamos un objeto Duración de 3600 segundos(1 hora), y vamos restándole distintas cantidades, con diferentes módulos.

public static void main(String[] args) {
		//Obtener Duration desde numero de dias
		Duration ej = Duration.ofHours(1);		//1 hora
		System.out.println(ej.getSeconds());
		
		Duration mi20 = Duration.ofMinutes(20);
		System.out.println(mi20.getSeconds());
		
		Duration mi40 = ej.minus(mi20);
		System.out.println(mi40.getSeconds());
		
		Duration mi30 = mi40.minusMinutes(10);
		System.out.println(mi30.getSeconds());
		
	}

Los resultados, siempre en segundos que es como se pidieron son:

parse()

public static Duration parse(CharSequence text)

Obtiene un objeto Duration, son la cantidad de tiempo facilitada en una string, con el formato PnDTnHnMn.nS

El formato de la cadena que se analizará es «PnDTnHnMn.nS», donde «nD» significa «n» número de días, «nH» significa «n» número de horas, «nM» significa «n» número de minutos, «nS» ” significa ‘n’ número de Segundos y “T” es un prefijo que debe usarse antes de la parte que consiste en “nHnMn.nS”. 

En el ejemplo, cargamos el Duration con 2 dias

public static void main(String[] args) {
		
		Duration d1 = Duration.parse("P2D");
		System.out.println(d1);

	}

Y en pantalla nos presenta la duración, aunque nos la dará en horas

toString()

public String toString()

Convierte el objeto Duration a string, utilizando el formato PT8H6M12.345S.

Los ejemplos de este método han sido mostrados a lo largo de toda la pagina.

toDays(), toHours(), toMillis(), toMinutes(), toNanos()

public long toDays()
public long toHours()
public long toMillis()
public long toMinutes()
public long toNanos()

Obtiene el valor del Duration en dias, horas, milisegundos o nanosegundos

El ejemplo queda autodefinido

public static void main(String[] args) {
		
		Duration d1 = Duration.ofDays(1);
		
		System.out.println("En dias   :" + d1.toDays());
		System.out.println("En minutos:" + d1.toMinutes());

	}

y la salida será

withNanos(), withSeconds()

public Duration withNanos(int nanoOfSecond)
public Duration withSeconds(long seconds)

Devuelve una copia del objeto Duration, con el tiempo especificado en segundos o nanosegundos

En el ejemplo, se crea un objeto Duration, que a continuación se abandona, cambiando su valor.

public static void main(String[] args) {
		
		Duration d1 = Duration.ofDays(1);
		d1 = d1.withSeconds(30);
		
		System.out.println("En dias    :" + d1.toDays());
		System.out.println("En minutos :" + d1.toMinutes());
		System.out.println("En Segundos:" + d1.toMillis()/1000);

	}

y su salida, en donde hemos tenido que obtener segundos desde las milésimas….

Conclusión

La clase Duration, nos permite almacenar cantidad de tiempo, y las operaciones necesarias para aumentar o disminuir dicho intervalo. Este objeto se puede usar posteriormente para cambiar clocks

Este articulo detalle una de las clases de la api java.time descritas anteriormente en el indice que se facilitó sobre este tema

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 52.14.150.55
Proxy: 52.14.150.55
Remote host: ec2-52-14-150-55.us-east-2.compute.amazonaws.com
Remote port: 50338
** 52.14.150.55, 172.70.126.139