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
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.