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);
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.
ResponderEliminarMucho ánimo, la asignatura de programación del ciclo no es fácil pero se puede aprobar!! :)
EliminarUn saludo y gracias por seguir el blog
Excelente post, me ayudó bastante. Muchas gracias!
ResponderEliminarMuchas grácias. Ha sido entrar en el post y encontrar exactamente lo que buscaba paso a paso y perfectamente explicado ;)
ResponderEliminarMe alegro de que te haya servido de ayuda. Un saludo Pablo
EliminarLo optimo es siempre tomar la fecha del servidor, la cual es mi interrogante, si alguien puede ayudar.
ResponderEliminarEn dia hay que sumar uno?, como se hace con el mes
ResponderEliminarEn el día no hay que sumar 1
EliminarBien explicado
ResponderEliminarMuchí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.
ResponderEliminarNo sabía que java tenía esta clase superpotente.
Un saludo
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.
Eliminarsabes 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.
ResponderEliminarsabes 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.
ResponderEliminarExcelente post! Me ha resuelto todas las dudas, hasta las que no tenia A LA PERFECCION!!
ResponderEliminarGRACIAS Y FELICIDADES!!!
Hola, bien explicado y por fin logré entenderle, muchas gracias :)
ResponderEliminarGracias Exc Post
ResponderEliminarExcelente :D
ResponderEliminarQue post tan excelente. El mejor en programación que he visto
ResponderEliminarGracias!! ;)
ResponderEliminarHola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?
ResponderEliminarHola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?
ResponderEliminarHola, exelente post, muy bien explicado, pero tengo una duda, ¿Como logro que me retorne el nombre del día y no la fecha?
ResponderEliminarPara eso puedes utilizar utilizar DAY_OF_WEEK
Eliminarint 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.
Hola muy buena ayuda pero como harias si necesitas sacar la fecha en formato AAAAMMDD? hice esto
ResponderEliminarreturn 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
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