Como obtener la fecha y hora actual del sistema en Java

A partir de Java 8 se incluyen en el lenguaje nuevas clases para manejo de fechas y horas que solucionan muchos de los problemas que se planteaban utilizando las clases para fechas incluidas en versiones anteriores de Java.
Obtener la fecha del sistema. Clase LocalDate
Para obtener la fecha actual del sistema se utiliza la clase LocalDate.
La clase LocalDate permite trabajar con fechas (sin incluir el tiempo).
Para usarla debemos hacer el siguiente import:
import java.time.LocalDate;
Para obtener la fecha del sistema se utiliza el método now()
LocalDate fechaActual = LocalDate.now();
Esta instrucción asigna a la variable fechaActual la fecha del sistema. Si la mostramos por pantalla obtendremos una fecha en formato yyyy-MM-dd.
2024-01-12
Acceder a la información de LocalDate.
La clase LocalDate proporciona métodos para acceder a valores contenidos en la fecha como por ejemplo el día, mes, año, día de la semana, nombre del mes, etc.
Podemos obtener el día, mes y año con los métodos:
  • getDayOfMonth()
  • getMonthValue()
  • getYear()
Ejemplo: obtener la fecha actual del sistema y mostrar por separado el día, el mes y el año
LocalDate ahora = LocalDate.now();
int dia = ahora.getDayOfMonth();
int mes = ahora.getMonthValue();
int año = ahora.getYear();
System.out.println("dia -> " + dia);
System.out.println("mes -> " + mes);
System.out.println("año -> " + año);
Salida por pantalla:
dia -> 12
mes -> 1
año -> 2024
Obtener la hora del sistema. Clase LocalTime
Para obtener la hora actual del sistema se utiliza la clase LocalTime.
La clase LocalTime permite trabajar con horas.
Para usarla debemos hacer el siguiente import:
import java.time.LocalTime;
Para obtener la hora del sistema se utiliza el método now()
LocalTime horaActual = LocalTime.now();
Esta instrucción asigna a la variable horaActual la hora del sistema. Si la mostramos por pantalla obtendremos una hora en formato HH:mm:ss.SSS.
17:58:01.043
Acceder a la información de LocalTime.
La clase LocalTime proporciona métodos para acceder a valores contenidos como por ejemplo la hora, los minutos, los segundos y los nanosegundos.
Podemos obtener el día, mes y año con los métodos:
  • getHour()
  • getMinute()
  • getSecond()
  • getNano()
Ejemplo: obtener la hora actual del sistema y mostrar por separado la hora, los minutos, los segundos y los nanosegundos
LocalTime horaActual = LocalTime.now();
int hora = horaActual.getHour();
int minuto = horaActual.getMinute();
int segundo = horaActual.getSecond();
int nano = horaActual.getNano();
System.out.println("Hora -> " + hora);
System.out.println("Munutos -> " + minuto);
System.out.println("Segundos -> " + segundo);
System.out.println("Nanosegundos -> " + nano);
Salida por pantalla:
Hora -> 19
Munutos -> 34
Segundos -> 22
Nanosegundos -> 42996500
Obtener la fecha y la hora del sistema de forma conjunta. Clase LocalDateTime
La clase LocalDateTime permite trabajar con fechas y horas.
Para usarla debemos hacer el siguiente import:
import java.time.LocalDateTime;
Para obtener la fecha y hora del sistema se utiliza el método now()
LocalDateTime ahora = LocalDateTime.now();
Esta instrucción asigna a la variable ahora la fecha y hora del sistema. Si la mostramos por pantalla obtendremos:
2024-01-12T19:19:47.896
Acceder a la información de LocalDateTime.
Para acceder a los valores se pueden utilizar los mismos métodos que para las clases LocalDate y LocalTime.

Antes de Java 8 para obtener la fecha actual del sistema se utilizaba la clase Calendar.
Su uso ya está obsoleto y ha sido sustituida por las clases introducidas en Java 8 para manejar las fechas y horas LocalDate, LocalTime, LocalDateTime
A pesar de ser una clase en desuso se muestra a continuación cómo era la forma obtener la fecha y hora del sistema utilizando Calendar.
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);
  
        //Mostramos por pantalla dia/mes/año
        System.out.println("Fecha Actual: " + dia + "/" + (mes+1) + "/" + año);
        
        //Mostramos por pantalla hora:minuto:segundo
        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/2023                                                                                           
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