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

Ends in 05h 23m 49s

TemporalAdjuster

La clase TemporalAdjuster, llega con una serie de métodos predefinidos que retornan un TemporalAdjuster y nos permite ajustar objetos relacionados con el tiempo de distintas formas. Funciones que tenían como único fin saber en que día empezaba o terminaba un mes, que dia es el proximo jueves, o cuando es el segundo lunes del mes, quedan obsoletas con el uso de la nueva API que proporciona Java8

La forma habitual de trabajar será

temporal = temporal.with(thisAdjuster);

Para conseguir el valor buscado, los métodos estáticos que vienen incorporados son

FuncionUtilidad
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)Ajusta al dia del mes que cumple con el dia de la semana, por Ej: «tercer domingo»
firstDayOfMonth()Ajusta a primer día del mismo mes
firstDayOfNextMonth()Ajusta a primer dia del siguiente mes
firstDayOfNextYear()Ajusta a primer dia del siguiente año
firstDayOfYear()Ajusta a primer dia del año actual
firstInMonth(DayOfWeek dayOfWeek)Ajusta a primer dia del mes que cumple con el dia de la semana indicado
lastDayOfMonth()Ajusta a ultimo dia del mes
lastDayOfYear()Ajusta a ultimo dia del año actual
lastInMonth(DayOfWeek dayOfWeek)Ajusta a ultimo dia del mes que cumple con el dia de la semana indicado
next(DayOfWeek dayOfWeek)Ajusta al dia del mes correspondiente al siguiente dia de la semana indicado
nextOrSame(DayOfWeek dayOfWeek)Ajusta como next(), a menos que el dia actual coincide con el dia buscado, en cuyo caso ajusta sobre el mismo
previous(DayOfWeek dayOfWeek)Ajusta al dia del mes correspondiente al anterior dia de la semana indicado
previousOrSame(DayOfWeek dayOfWeek)Ajusta como previous(), a menos que el dia actual coincide con el dia buscado, en cuyo caso ajusta sobre el mismo
ofDateAdjuster(UnaryOperator dateBasedAdjuster)

A continuación, hay una clase que calcula algunas fechas

public static void main(String[] args) {
	LocalDate hoy = LocalDate.now();
	System.out.println("Estamos a    :" + hoy);
	
	//Segundo domingo del mes
	LocalDate fecha = hoy.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.SUNDAY));
	System.out.println("El segundo domingo del mes :" + fecha);

	//Segundo domingo del mes
	fecha = hoy.with(TemporalAdjusters.firstDayOfNextMonth());
	System.out.println("El primer dia del siguientel mes :" + fecha);
	
	//Segundo domingo DEL SIGUIENTE MES
	fecha = hoy.with(TemporalAdjusters.firstDayOfNextMonth())
 	           .with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.SUNDAY));
	System.out.println("El segundo domingo del siguiente mes :" + fecha);
}

El resultado seria algo como:

Creando reglas propias

Podemos crear nuestros propios ajustes definiendo una clase que implemente la interfaz, aunque como es una interfaz funcional, también la podemos crear en nuestro método sin problema.

Imaginemos que trabajamos con regularidad con 7 días de distancia; esto es, nos dan una fecha, y tenemos que determinar la fecha que será dentro de 7

public static void main(String[] args) {
		
	TemporalAdjuster mas7 = t -> t.plus(Period.ofDays(7));
		
	LocalDate hoy = LocalDate.now();
	LocalDate envio = hoy.with(mas7);
	System.out.println("Estamos a    :" + hoy);
	System.out.println("El envío será:" + envio);
		
}

Puede que sea muy sencillo, pero si añadimos que nuestros envíos solo se realizan en lunes?

Pues a nuestra implementación le tendríamos que añadir algo como

TemporalAdjuster mas7 = t -> { 
	Temporal nuevo = t.plus(Period.ofDays(7));
	nuevo = nuevo.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
	return nuevo;
};

Aunque todo eso lo podemos simplificar dejando el código como

public static void main(String[] args) {
		
//	TemporalAdjuster mas7 = t -> { 
//		Temporal nuevo = t.plus(Period.ofDays(7));
//		nuevo = nuevo.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
//		return nuevo;
//	};
	TemporalAdjuster mas7 = t -> t.plus(Period.ofDays(7))
                             .with(TemporalAdjusters.next(DayOfWeek.MONDAY));
		
	LocalDate hoy = LocalDate.now();
	LocalDate envio = hoy.with(mas7);
	System.out.println("Estamos a    :" + hoy);
	System.out.println("El envío será:" + envio);
}

Conclusión

La clase TemporalAdjuster, nos permite modificar facilmente los objetos TEMPORAL, para que luego puedan ser reutilizados en el resto de clases de la api java.time

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


Descubre más desde Recursos para formacion

Suscríbete y recibe las últimas entradas en tu correo electrónico.

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: 18.97.14.82
Proxy: 18.97.14.82
Remote host: 18-97-14-82.crawl.commoncrawl.org
Remote port: 52366
** 18.97.14.82, 172.71.223.101