Método withMonth de LocalDate en Java

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

La clase LocalDate en Java8 proporciona múltiples métodos para manipular valores de fecha. Un método de este tipo es withMonth(), que devuelve una nueva instancia de LocalDate después de cambiar o establecer el mes del año.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/for_loop -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/output -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/classes_objects -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/packages_api -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/date -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/exceptions -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} java/object_methods -.-> lab-117862{{"Método withMonth de LocalDate en Java"}} end

Creando una instancia de LocalDate

El primer paso es crear una instancia de LocalDate en Java. La clase LocalDate se encuentra en el paquete java.time, por lo que incluiremos el paquete al principio de nuestro archivo de código. La clase LocalDate proporciona un método of() que puede crear una nueva instancia de LocalDate.

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Usando el método withMonth()

El método withMonth() devuelve una nueva instancia de LocalDate con el mes del año establecido en el valor proporcionado como argumento.

Podemos establecer un mes del año diferente utilizando el método withMonth() y obtener una fecha recién creada. Aquí estamos estableciendo el mes del año en 4 y obteniendo la nueva fecha.

// estableciendo el mes del año en 4 y obteniendo la nueva fecha
LocalDate newDate = date.withMonth(4);

// imprimiendo la nueva fecha
System.out.println("Nueva Fecha: " + newDate);

Aquí está el código completo:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);

        // estableciendo el mes del año en 4 y obteniendo la nueva fecha
        LocalDate newDate = date.withMonth(4);

        // imprimiendo la nueva fecha
        System.out.println("Nueva Fecha: " + newDate);
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha original: 2022-10-12
Nueva Fecha: 2022-04-12

Manejo de valores de mes no válidos

Si el valor de mes pasado al método withMonth() es no válido, es decir, fuera del rango [1, 12], lanzará una DateTimeException.

A continuación, se presenta un ejemplo que demuestra cómo manejar un valor de mes no válido.

import java.time.DateTimeException;
import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);

        try {
            // intentando establecer un valor de mes no válido (13)
            LocalDate newDate = date.withMonth(13);

            // imprimiendo la nueva fecha
            System.out.println("Nueva Fecha: " + newDate);
        } catch(DateTimeException ex) {
            System.out.println("Valor de mes no válido proporcionado: " + ex.getMessage());
        }
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha original: 2022-10-12
Valor de mes no válido proporcionado: Valor no válido para MonthOfYear (valores válidos 1 - 12): 13

Cambiando el mes del año en la instancia de fecha original

El método withMonth() devuelve una nueva instancia de LocalDate con el valor del mes del año establecido en el nuevo valor, y no cambia la instancia de fecha original. Si desea cambiar el valor del mes del año en la fecha original, debe asignar el valor devuelto por withMonth() de nuevo a la instancia de fecha original, como se muestra a continuación:

// cambiando el mes del año en la instancia de fecha original
date = date.withMonth(11);

// imprimiendo la fecha actualizada
System.out.println("Fecha actualizada: " + date);

Aquí está el código completo:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);

        // estableciendo el mes del año en 5 y obteniendo la nueva fecha
        LocalDate newDate = date.withMonth(5);

        // imprimiendo la nueva fecha
        System.out.println("Nueva Fecha: " + newDate);

        // cambiando el mes del año en la instancia de fecha original
        date = date.withMonth(11);

        // imprimiendo la fecha actualizada
        System.out.println("Fecha actualizada: " + date);
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha original: 2022-10-12
Nueva Fecha: 2022-05-12
Fecha actualizada: 2022-11-12

Manejo de un valor de día no válido

Si el día del mes es no válido para el año al cambiar el mes, se cambiará al último día válido del nuevo mes. Por ejemplo, si cambiamos el mes del año de febrero a abril en un año bisiesto, el valor del día se ajustará automáticamente al último día válido de abril.

// creando una nueva instancia de LocalDate
LocalDate date = LocalDate.of(2024, 2, 29);

// imprimiendo la fecha original
System.out.println("Fecha original: " + date);

// estableciendo el mes del año en abril
LocalDate newDate = date.withMonth(4);

// imprimiendo la nueva fecha
System.out.println("Nueva Fecha: " + newDate);

Aquí está el código completo:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2024, 2, 29);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);

        // estableciendo el mes del año en abril
        LocalDate newDate = date.withMonth(4);

        // imprimiendo la nueva fecha
        System.out.println("Nueva Fecha: " + newDate);
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha original: 2024-02-29
Nueva Fecha: 2024-04-30

Usando el método withMonth() en un bucle

Podemos usar el método withMonth() en un bucle para generar una lista de fechas con diferentes valores de mes del año. A continuación, se presenta un ejemplo que genera fechas para cada mes del año 2022:

// generando fechas para cada mes del año 2022
for (int month = 1; month <= 12; month++) {
    LocalDate date = LocalDate.of(2022, month, 1);
    System.out.println("Fecha para " + date.getMonth() + ": " + date);
}

Aquí está el código completo:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // generando fechas para cada mes del año 2022
        for (int month = 1; month <= 12; month++) {
            LocalDate date = LocalDate.of(2022, month, 1);
            System.out.println("Fecha para " + date.getMonth() + ": " + date);
        }
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha para ENERO: 2022-01-01
Fecha para FEBRERO: 2022-02-01
Fecha para MARZO: 2022-03-01
Fecha para ABRIL: 2022-04-01
Fecha para MAYO: 2022-05-01
Fecha para JUNIO: 2022-06-01
Fecha para JULIO: 2022-07-01
Fecha para AGOSTO: 2022-08-01
Fecha para SEPTIEMBRE: 2022-09-01
Fecha para OCTUBRE: 2022-10-01
Fecha para NOVIEMBRE: 2022-11-01
Fecha para DICIEMBRE: 2022-12-01

Usando el método getMonthValue()

El método getMonthValue() se utiliza para obtener el valor del mes del año de una fecha. A continuación, se presenta un ejemplo que demuestra cómo usar los métodos withMonth() y getMonthValue() para cambiar y obtener el valor del mes del año de una fecha:

// creando una nueva instancia de LocalDate
LocalDate date = LocalDate.of(2022, 11, 15);

// imprimiendo la fecha original
System.out.println("Fecha original: " + date);

// obteniendo el valor del mes del año
int originalMonthValue = date.getMonthValue();

// cambiando el mes del año a 10
date = date.withMonth(10);

// obteniendo el nuevo valor del mes del año
int newMonthValue = date.getMonthValue();

// imprimiendo la fecha y los valores del mes actualizados
System.out.println("Fecha actualizada: " + date);
System.out.println("Valor original del mes: " + originalMonthValue);
System.out.println("Nuevo valor del mes: " + newMonthValue);

Aquí está el código completo:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creando una nueva instancia de LocalDate
        LocalDate date = LocalDate.of(2022, 11, 15);

        // imprimiendo la fecha original
        System.out.println("Fecha original: " + date);

        // obteniendo el valor del mes del año
        int originalMonthValue = date.getMonthValue();

        // cambiando el mes del año a 10
        date = date.withMonth(10);

        // obteniendo el nuevo valor del mes del año
        int newMonthValue = date.getMonthValue();

        // imprimiendo la fecha y los valores del mes actualizados
        System.out.println("Fecha actualizada: " + date);
        System.out.println("Valor original del mes: " + originalMonthValue);
        System.out.println("Nuevo valor del mes: " + newMonthValue);
    }
}

Utilice el siguiente comando para compilar y ejecutar el código en la terminal:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Debería ver la siguiente salida:

Fecha original: 2022-11-15
Fecha actualizada: 2022-10-15
Valor original del mes: 11
Nuevo valor del mes: 10

Resumen

En este laboratorio, aprendiste cómo usar el método withMonth() para crear una copia de una instancia de LocalDate con el mes del año establecido en un nuevo valor. También aprendiste cómo manejar valores de mes no válidos y cómo usar el método getMonthValue() para obtener el valor del mes del año de una instancia de LocalDate. El método withMonth() es una herramienta útil para manipular fechas y se puede usar de muchas maneras diferentes, incluyendo la generación de una lista de fechas para cada mes del año.