Como obtener la fecha actual del sistema en Java

Para obtener la fecha actual y en general para trabajar con fechas en Java tenemos varias posibilidades. En este post vamos a explicar como obtener la fecha del sistema usando la clase Calendar.
Calendar es una clase base abstracta con la que podremos representar y manejar fechas, así como obtener y modificar las distintas partes que la componen: año, mes, dia, hora, minuto, segundo, etc.
Para usarla debemos hacer el siguiente import:
import java.util.Calendar;
Para instanciar un objeto de la clase Calendar, tendremos 2 opciones:
Opción 1. Utilizar el método getInstance(), que nos proporcionará un objeto Calendar cuyos campos han sido inicializados con la fecha y la hora actuales del sistema.
Calendar fecha = Calendar.getInstance();
Opción 2. Utilizar la clase GregorianCalendar. Esta clase es una subclase de Calendar, que nos proporciona un calendario gregoriano estándar.
Calendar fecha = new GregorianCalendar();
Para usar GragorianCalendar debemos hacer el siguiente import:
import java.util.GregorianCalendar;
Una vez creado el objeto que contiene la fecha del sistema, para obtener un campo concreto de la fecha se utiliza el método get(campo) donde campo indica la parte de la fecha que quiero obtener. Cada una de estas partes está definida como una constante en la clase Calendar.
Por ejemplo, para obtener el año de la fecha actual podemos escribir las instrucciones:
Calendar fecha = new GregorianCalendar();
int año = fecha.get(Calendar.YEAR);

Ejemplo: Programa Java que obtiene la fecha y hora actual del sistema y la muestra por pantalla. El programa mostrará año, mes, día, hora, minutos y segundos.
import java.util.*;
public class Fechas {
    public static void main(String[] args) {
        //Instanciamos el objeto Calendar
        //en fecha obtenemos la fecha y hora del sistema
        Calendar fecha = new GregorianCalendar();
        //Obtenemos el valor del año, mes, día,
        //hora, minuto y segundo del sistema
        //usando el método get y el parámetro correspondiente
        int año = fecha.get(Calendar.YEAR);
        int mes = fecha.get(Calendar.MONTH);
        int dia = fecha.get(Calendar.DAY_OF_MONTH);
        int hora = fecha.get(Calendar.HOUR_OF_DAY);
        int minuto = fecha.get(Calendar.MINUTE);
        int segundo = fecha.get(Calendar.SECOND);
        System.out.println("Fecha Actual: "
                           + dia + "/" + (mes+1) + "/" + año);
        System.out.printf("Hora Actual: %02d:%02d:%02d %n",
                                              hora, minuto, segundo);
    }
}
El programa muestra la fecha y hora actual de la siguiente forma:
Fecha Actual: 4/11/2013
Hora Actual: 16:53:25
Debemos tener en cuenta que el valor devuelto por Calendar.MONTH correspondiente al mes comienza por 0, es decir, el valor 0 corresponde a enero y el valor 11 corresponde a diciembre por lo tanto debemos sumarle uno a este valor antes de operar con él.
Además de obtener la fecha, también podemos asignar valores a un campo determinado de la fecha.
Para asignar valores a un campo concreto de la fecha o asignar fechas completas se utiliza método set:
Ejemplo:
fecha.set(2013,5,1); //asigna año, mes, día
fecha.set(2013,5,1,3,45,12); //asigna año, mes, día, hora, minuto, segundo
fecha.set(Calendar.YEAR,2015); //asigna el valor 2015 al año
También podemos sumar o restar valores a la fecha y hora.
Ejemplo: sumar 10 días a la fecha actual:
//sumar 10 días a la fecha actual
fecha.add(Calendar.DAY_OF_MONTH, 10);
Ejemplo: sumar 10 minutos a la hora actual:
//sumar 10 minutos a la hora actual
fecha.add(Calendar.MINUTE, 10);
Ejemplo: restar 2 años a la fecha actual:
//restar 2 años a la fecha actual
fecha.add(Calendar.YEAR, -2);

25 comentarios:

  1. Muchas gracias por el tiempo que dedicas a este blog, estoy haciendo un ciclo y la asignatura de programación me está costando, con los ejercicios básicos que pusiste por fin estoy aprendiendo.

    ResponderEliminar
    Respuestas
    1. Mucho ánimo, la asignatura de programación del ciclo no es fácil pero se puede aprobar!! :)
      Un saludo y gracias por seguir el blog

      Eliminar
  2. Excelente post, me ayudó bastante. Muchas gracias!

    ResponderEliminar
  3. Muchas grácias. Ha sido entrar en el post y encontrar exactamente lo que buscaba paso a paso y perfectamente explicado ;)

    ResponderEliminar
    Respuestas
    1. Me alegro de que te haya servido de ayuda. Un saludo Pablo

      Eliminar
  4. Lo optimo es siempre tomar la fecha del servidor, la cual es mi interrogante, si alguien puede ayudar.

    ResponderEliminar
  5. En dia hay que sumar uno?, como se hace con el mes

    ResponderEliminar
  6. Muchísimas gracias. Estaba haciendo un ejercicio de una clase para almacenar datos de una película de videoclub y estaba planteándome como calcular la fecha de devolución sumando una serie de días a la fecha de alquiler.
    No sabía que java tenía esta clase superpotente.
    Un saludo

    ResponderEliminar
    Respuestas
    1. La verdad es que es casi imposible conocer todas las posibilidades que ofrece Java por eso me alegro de que este post te haya servido para descubrir las clases Calendar y GregorianCalendar. Un saludo.

      Eliminar
  7. sabes como hacer esto : Haga una función de nombre TotDias(d,m) con parámetros d (dia) y m (mes) que retorne el total de días transcurridos desde inicio de año hasta esa fecha.

    ResponderEliminar
  8. sabes como hacer esto : Haga una función de nombre TotDias(d,m) con parámetros d (dia) y m (mes) que retorne el total de días transcurridos desde inicio de año hasta esta fecha.

    ResponderEliminar
  9. Excelente post! Me ha resuelto todas las dudas, hasta las que no tenia A LA PERFECCION!!
    GRACIAS Y FELICIDADES!!!

    ResponderEliminar
  10. Hola, bien explicado y por fin logré entenderle, muchas gracias :)

    ResponderEliminar
  11. Que post tan excelente. El mejor en programación que he visto

    ResponderEliminar
  12. Hola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?

    ResponderEliminar
  13. Hola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?

    ResponderEliminar
  14. Hola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?

    ResponderEliminar
    Respuestas
    1. Para eso puedes utilizar utilizar DAY_OF_WEEK
      int nombreDia = fecha.get(Calendar.DAY_OF_WEEK);
      Devuelve un entero del 1 al 7. 1 corresponde a domingo, 2 a lunes, 3 a martes, etc. Según el valor devuelto puedes mostrar el nombre del dia.

      Eliminar
  15. Hola muy buena ayuda pero como harias si necesitas sacar la fecha en formato AAAAMMDD? hice esto
    return Integer.toString(date.get(Calendar.YEAR)) + Integer.toString(date.get(Calendar.MONTH)) + Integer.toString(date.get(Calendar.DAY_OF_MONTH));

    el resultdao es 2015622 PERO me gustaria que fuera 20150622


    tambien quisiera saber porque me trae el mes 6 si estamos en julio? supongo que empieza en ENERO = 0 asi que lo resolvi poniendo un mas 1

    ResponderEliminar
  16. Muchas gracias, me gustó mucho esta página en especial porque explica muy bien. En otras páginas sólo dicen "es muy fácil" y ponen un código muy largo (o corto) pero no explican y eso es lo que se busca a veces; comprender porque y para que. Muchas gracias.

    ResponderEliminar