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

Ends in 05h 23m 49s

Java 8 – Month

Month es, básicamente una enumeración que contiene los nombres de los doce meses del año… aunque, además, nos proporciona una serie de métodos que nos permiten trabajar mas fácilmente con el objeto Mes. La enumeracion de que dispone soporta: JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER; aunque para salida, los podremos conseguir en el idioma que necesitemos

of(), from(), valueOf(), values()

static Month	of(int month)
static Month	from(TemporalAccessor temporal)
static Month	valueOf(String name)

Nos permite crear un objeto Month:

  • Indicando el numero del mas
  • Facilitando un campo temporal que contenga un mes, como LocalDate, o LocalDateTime
  • Indicando el nombre de mes, tal y como esta en la enumeracion, (JANUARY, FEBRUARY…)
static Month[]	values()

Crea un array con los 12 objetos correspondientes a los 12 Meses

Si queremos ver todo esto en un ejemplo, podemos hacer:

	public static void main(String[] args) {
		
		Month febrero = Month.of(2);
		System.out.println("febrero   : " + febrero);
		
		LocalDate undia = LocalDate.parse("2017-03-23");
		Month nose = Month.from(undia);
		System.out.println("nose      : " + nose);
		
		Month deVal = Month.valueOf("JUNE");
		System.out.println("deVal     : " + deVal);
		
		Month[] todos = Month.values();
		System.out.println("Lista........");
		Arrays.stream(todos).forEach(System.out::println);
		
	}

Para obtener:

plus(), minus()

Month	minus(long months)
Month	plus(long months)

Nos permite obtener un nuevo mes, tras sumarle o restarle al anterior la cantidad indicada

Enel ejemplo, sumamos a Febrero 3, en una ocasión, y restamos 2 en otra. El paso de un año a otro, en este ejercicio no se tiene en cuenta, ya que solo se trabaja con meses

public static void main(String[] args) {
	Month febrero = Month.of(2);
	System.out.println("febrero   : " + febrero);

	Month mas3 = febrero.plus(3);
	System.out.println("mas3      : " + mas3);

	Month menos2 = febrero.minus(2);
	System.out.println("menos2    : " + menos2);

}

El resultado que da es:

isSupported()

boolean	isSupported(TemporalField field)

Nos indica si el tipo de campo temporal esta soportado en Month

Podemos ver su uso en un ejemplo

public static void main(String[] args) {
		
	Month d1 = Month.of(8);
	boolean ms = d1.isSupported(ChronoField.MILLI_OF_SECOND);
	boolean dw = d1.isSupported(ChronoField.DAY_OF_WEEK);
	boolean dm = d1.isSupported(ChronoField.MONTH_OF_YEAR);
		
		
	System.out.println("Soporta ChronoField.MILLI_OF_SECOND:"+ms);
	System.out.println("Soporta ChronoField.DAY_OF_WEEK:"+dw);
	System.out.println("Soporta ChronoField.MONTH_OF_YEAR:"+dm);
}

Si lo hacemos correr, veremos que solo esta soportado el mes

get(), getDisplayName(), getLong(), getValue()

int	get(TemporalField field)
String	getDisplayName(TextStyle style, Locale locale)
long	getLong(TemporalField field)
int	getValue()

Nos permite obtener

  • El valor de un dato, en este caso, solo esta autorizado el numero del mes
  • El nombre del mes, en el idioma indicado en Locale

En el ejemplo vemos como se comporta

public static void main(String[] args) {
	Month d1 = Month.of(4);
	System.out.println("Numero mes   : " 
			+ d1.get(ChronoField.MONTH_OF_YEAR));
		
	Locale es = new Locale("es", "ES");
	Locale fr = Locale.FRENCH;
		
	System.out.println("Mes es       : " 
			+ d1.getDisplayName(TextStyle.FULL,es));
	System.out.println("Mes fr       : " 
			+ d1.getDisplayName(TextStyle.FULL,fr));
		
	System.out.println("getLong      : " 
			+ d1.getLong(ChronoField.MONTH_OF_YEAR));

	System.out.println("getValue     : " 
			+ d1.getValue());
	
}

Y nos presenta el numero del mes, y el nombre en dos idiomas, según el Locale

length(), maxLength(), minLength()

int	        length(boolean leapYear)
int	        maxLength()
int	        minLength()

Nos facilita el numero de días que tiene el mes, para lo que tenemos que indicar si el año es bisiesto o no, y la longitud del mes, máxima y mínima

El ejemplo podria ser:

public static void main(String[] args) {
Year dato = Year.of(2020);
Month mes = Month.of(2);

    System.out.println("Longitud minima  : " 
            +  mes.minLength());
    System.out.println("Longitud maxima  : " 
            +  mes.maxLength());
    System.out.println("Longitud exacta  : " 
            +  mes.length(dato.isLeap()));

}

Que nos daría

range()

ValueRange	range(TemporalField field)

Nos facilita un ValueRange con el numero mínimo y máximo de meses en un año

Si preparamos este ejemplo:

public static void main(String[] args) {
		Month mes = Month.of(2);
		
		System.out.println("Range            : " 
				+  mes.range(ChronoField.MONTH_OF_YEAR));

	}

Nos aparece

adjustInto()

Temporal	adjustInto(Temporal temporal)

Obtiene un nuevo objeto temporal aplicando el mes indicado en el objeto temporal pasado

Vemos en el ejemplo, como obtenemos una LocalDate ajustada, si utilizamos el metodo

public static void main(String[] args) {
		
	LocalDate undia = LocalDate.parse("2017-03-23");
	Month elMes = Month.of(9);
	System.out.println("Fecha           :" + undia);
	LocalDate otro = (LocalDate)elMes.adjustInto(undia);
	System.out.println("Fecha ajustada  :" + otro);

}

Veremos como se convierte la fecha

firstDayOfYear()

int	firstDayOfYear(boolean leapYear)

Nos calcula que día del año es el primer día del mas. Debemos indicar si hablamos de un año bisiesto o no, ya que a partir de Marzo, tendrá importancia

Vemos un pequeño ejemplo de como lo podríamos hacer

public static void main(String[] args) {
			
	Month elMes = Month.of(2);
	System.out.println("Dia del año   :" + 
		elMes.firstDayOfYear(Year.isLeap(2016)));		

}
Y nos dira que el primer dia de febrero es el 32 del año

firstMonthOfQuarter()

Month	firstMonthOfQuarter()

Nos facilita un objeto Month correspondiente al mes que inicia el trimestre que pasamos

En el ejemplo, preguntamos por el mes que inicia el trimestre en que se encuentra Junio, y luego Noviembre

public static void main(String[] args) {
			
	Month elMes = Month.of(6);
	System.out.println("Inicio trimestre de Junio    :" + 
			elMes.firstMonthOfQuarter());		

	Month elMes2 = Month.of(11);
	System.out.println("Inicio trimestre de Noviembre:" + 
			elMes2.firstMonthOfQuarter());	
	}

y la respuesta es

Conclusión

La clase Month mantiene información acerca de un mes, y, aunque solo acepta consultas acerca del mes puede ser reutilizados con 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

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: 3.238.71.155
Proxy: 3.238.71.155
Remote host: ec2-3-238-71-155.compute-1.amazonaws.com
Remote port: 35466
** 3.238.71.155, 172.70.42.138