13 29
09
2010

Cómo manejar fechas en Java

Como no podía ser menos, el primer artículo tenía que estar relacionado con el lenguaje de programación Java.

El manejo de fechas en Java puede resultar en un principio un poco menos intuitivo que en otros lenguajes tales como PHP o Visual Basic. Sin embargo, para trabajar con fechas de una forma más cómoda, contamos con la clase java.util.Calendar.

Calendar es una clase base abstracta con la que podremos representar y manejar fechas (objetos de tipo Date), así como modificar y obtener sus datos enteros tales como YEAR, MONTH, DAY, etc…

Para instanciar un objeto de clase Calendar, tendremos 2 opciones:

  • Opción A: Utilizar el método getInstance(), que nos proporcionará un objeto Calendar cuyos campos han sido inicializados con la fecha y la hora actuales.
  • Opción B: Utilizar el constructor de la clase GregorianCalendar. Esta clase es a su vez una subclase de java.util.Calendar, que nos proporciona un calendario estándar usado comunmente en la mayor parte del mundo.

A continuación mostramos el código de las 2 opciones mencionadas:

Date date = new Date();
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = new GregorianCalendar();

Una vez instanciado el objeto Calendar, ya podemos manejar las fechas a nuestro antojo.

¿Cómo extraer los datos individuales de la fecha?

¿A que os suenan los famosos getters y setters…? pues esta clase no iba a ser menos.
La clase java.util.Calendar nos proporciona un único método get(int field) para extraer cualquier atributo del calendario que indiquemos en el atributo field, tal y como veremos a continuación en el siguiente código de ejemplo.
NOTA: Ten en cuenta que valores como el mes o el día de la semana comienzan por 0, no por 1.

// Instanciamos el objeto Calendar
Calendar calendar = Calendar.getInstance();
// Obtenemos el valor del año, mes y día.
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
System.out.println("AÑO ACTUAL: " + year);
System.out.println("MES ACTUAL: " + month);
System.out.println("DÍA ACTUAL: " + date);

¿Cómo modificar los atributos o valores de la fecha?

Al igual que disponemos del método get(int field) para obtener cualquier valor de una fecha, disponemos también del método set(int field, int value) para modificarlo.
Deberemos pasar 2 parámetros:

  • field: atributo de la fecha que queremos modificar
  • value: nuevo valor a asignar

Veamos a continuación un ejemplo de cómo modificar los atributos año, mes y día:

calendar.set(Calendar.YEAR, 2020);
calendar.set(Calendar.MONTH, 02); // OJO: Recueda que los valores de los meses comienzan por 0.
calendar.set(Calendar.DATE, 30);

Además del método simple set(int field, int value), disponemos también de 3 métodos más sobrecargados set que nos permitirán asignar fechas completas en un único paso:

// Asignamos año, mes y día.
calendar.set(2020, 02, 30);
// Asignamos año, mes, día, horas y minutos.
calendar.set(2020, 02, 30, 19, 00);
// Asignamos año, mes, día, horas, minutos y segundos.
calendar.set(2020, 02, 30, 19, 00, 55);

¿Cómo sumar y restar fechas?

He aquí uno de los métodos más útiles cuando queremos operar con fechas: add(int field, int amount).
Con la misma estructura que el método set(int field, int amount), podremos sumar (y por lo tanto restar) cantidades de diferentes valores a una fecha.

  • field: atributo de la fecha que queremos modificar y cuya cantidad pasaremos en el parámetro amount
  • amount: cantidad a sumar o restar (valores negativos) a la fecha

Viajemos en el tiempo y rejuvenezcamos 10 años:

// Sumamos 30 minutos a la fecha actual.
calendar.add(Calendar.MINUTE, 30);
// Sumamos 100 días a la fecha actual.
calendar.add(Calendar.DATE, 100);
// Restamos 10 años a la fecha actual.
calendar.add(Calendar.YEAR, -10);

Para más información sobre la clase Calendar podéis acceder también a la documentación de Sun (o de Oracle, como más os guste).

Espero que el artículo os haya sido de utilidad. Como habéis comprobado, la clase Calendar nos facilita la vida cuando queremos manejar fechas en java, y es muy fácil e intuitiva de utilizar. En próximas entregas, veremos cómo realizar más operaciones con fechas.

Tags:

13 respuestas en “Cómo manejar fechas en Java”

  1. Muy buena la info sobre fechas en Java, me ha servido mucho..

    saludos y excelente blog..agregado a mi blogroll..

  2. Excelente material justo lo que estaba buscando explicado con claridad y exactitud. Gracias y felicitaciones.

  3. Date fechaActual = new Date(System.currentTimeMillis());
    Calendar c = Calendar.getInstance();
    System.out.println(c.get(Calendar.YEAR));
    System.out.println(c.get(Calendar.DAY_OF_MONTH));
    System.out.println(c.get(Calendar.DAY_OF_YEAR));
    c.set(Calendar.MONTH, 6);
    fechaActual.setTime(c.getTimeInMillis());
    System.out.println(fechaActual);

  4. como puedo asignar la nueva fecha obtenida.

  5. como puedo asignar a una variable la nueva fecha obtenida

  6. excelente aporte amigo… gracias!! tienes mi voto por si algun dia te avientas para presidente de mexico..jjj :)

  7. hola como puede saber la semana del año por cierta fecha ejemplo 7-01-2014 es Semana 2 inicia el lunes 6 enero y termina 12 de enero del presente año

  8. Muchas gracias por la aportación. Me ha resultado de mucha utilidad.

    Un saludo.

  9. Exelente aporte amigo!! genial!!

  10. Buen blog amigo… Muchas gracias por el aporte.

    Un saludo.

  11. Hola: Tengo fechas almacenadas como texto en una base de datos. Necesito saber como compararlas para al final obtener la fecha mas reciente. Saludos

  12. Y como se manejaria un Datapicker en un servlet
    con un formulario jsp,
    ¿como capturaria los parametros en el formularioVO, y manejo los datos en el codigo del servlet, y los vuelvo a imprimir en respuesta?

  13. Hora y media, volviéndome loco hasta leer en esta web:

    “calendar.set(Calendar.MONTH, 02); // OJO: Recueda que los
    valores de los meses comienzan por 0.”

    Gracias un saludo.

Dejar un comentario