Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:fechas

This is an old revision of the document!


Fecha y hora

\part*{Fecha y hora en Java 8}

En este tema veremos la nueva API para gestión de fechas que se introdujo en Java 8. Comprenden clases y métodos para almacenar valores de fechas y poder trabajar con ellos. Les echaremos un vistazo a los tipos y operaciones más comunes para trabajar con fechas y períodos de tiempo.

\section{Tipos para almacenar fechas}

\subsection{LocalDate}

La clase \verb LocalDate permite almacenar el valor de una fecha sin hora de la que podremos extraer los partes de fecha que podamos necesitar mediante métodos \emph{getter}.

\begin{lstlisting}[language=java] La fecha de hoy LocalDate fechaHoy = LocalDate.now(); Una fecha concreta LocalDate fecha = LocalDate.of(2018, Month.NOVEMBER, 26); System.out.println(fecha); 2018-11-26 DayOfWeek dia = fecha.getDayOfWeek(); Month mes = fecha.getMonth(); int diaDelMes = fecha.getDayOfMonth(); int numeroMes = fecha.getMonthValue(); int numeroAno = fecha.getYear(); \end{lstlisting} \subsection{LocalTime} La clase \verb LocalTime permite almacenar horas (hora, minuto y segundo). El funcionamiento es similar a la clase \verb LocalDate : \begin{lstlisting}[language=java] LocalTime ahora = LocalTime.now(); int hora = ahora.getHour(); int minutos = ahora.getMinute(); int segundos = ahora.getSecond(); \end{lstlisting} \subsection{DayOfWeek} Esta enumeración permite almacenar valores que representan el día de la semana \begin{lstlisting}[language=java] Podemos almacenar un día de la semana DayOfWeek diaSemana = DayOfWeek.MONDAY;

El día siguiente diaSemana = diaSemana.plus(1); Hace dos días diaSemana = diaSemana.minus(2); \end{lstlisting}

También podemos obtener su representación por pantalla en función de la configuración de idioma de nuestra aplicación:

\begin{lstlisting}[language=java] DayOfWeek diaSemana = DayOfWeek.FRIDAY; Locale locale = new Locale(“es”, “ES”);

System.out.println(diaSemana.getDisplayName(TextStyle.FULL, locale)); viernes System.out.println(diaSemana.getDisplayName(TextStyle.NARROW, locale)); V System.out.println(diaSemana.getDisplayName(TextStyle.SHORT, locale)); vie \end{lstlisting} \subsection{Month} Esta enumeración permite almacenar valores que representan un mes \begin{lstlisting}[language=java] Podemos almacenar un mes Month mes = Month.NOVEMBER;

Dentro de dos meses mes = Month.NOVEMBER; mes = mes.plus(3); System.out.println(mes); FEBRUARY Hace dos meses mes = mes.minus(2); System.out.println(mes); DECEMBER \end{lstlisting}

También podemos obtener su representación por pantalla en función de la configuración de idioma de nuestra aplicación:

\begin{lstlisting}[language=java] Month mes = Month.NOVEMBER; Locale locale = new Locale(“es”, “ES”);

System.out.println(mes.getDisplayName(TextStyle.FULL, locale)); noviembre System.out.println(mes.getDisplayName(TextStyle.NARROW, locale)); N System.out.println(mes.getDisplayName(TextStyle.SHORT, locale)); nov \end{lstlisting} \section{Operaciones con fechas} Como hemos dicho, además de proporcionar los tipos de datos y estructuras para almacenar valores de fecha y sus partes, la nueva API de fechas de Java también proporciona métodos para realizar operaciones con estos datos. \begin{lstlisting}[language=java] LocalDate fechaHoy = LocalDate.now(); System.out.println(“Este año es bisiesto?: ” + fechaHoy.isLeapYear()); false System.out.println(fechaHoy.minus(Period.ofWeeks(3))); 2018-11-03 System.out.println(fechaHoy.plus(Period.ofDays(35))); 2018-12-29 \end{lstlisting}

También se puede formatear el valor de la fecha para que pueda ser representado como una cadena de texto y viceversa:

\begin{lstlisting}[language=java] Pasa la fecha a una representación en String String cadenaFecha = fechaHoy.format(DateTimeFormatter.ofPattern(“dd/MM/yyyy”)); Pasa la representación en String a un valor de fecha LocalDate.parse(cadenaFecha, DateTimeFormatter.ofPattern(“dd/MM/yyyy”)); \end{lstlisting}

Se pueden ver más ejemplos de formatos de fecha y patrones en la API de Java correspondiente a la \href{https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html}{clase DateTimeFormatter}

También es posible comparar dos fechas entre ellas directamente para saber cuál es anterior/posterior o si son iguales

\begin{lstlisting}[language=java] LocalDate fechaHoy = LocalDate.now(); LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1));

System.out.println(fechaHoy.isAfter(fechaAyer)); true System.out.println(fechaHoy.isBefore(fechaAyer)); false System.out.println(fechaHoy.equals(fechaAyer)); false \end{lstlisting} De forma muy similar, podremos realizar estas mismas operaciones con horas utilizando el tipo de datos \verb LocalTime que hemos visto más arriba. Y saber cuál es la distancia entre dos fechas determinadas: \begin{lstlisting}[language=java] LocalDate fechaHoy = LocalDate.now(); LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1)); Una vez calculada la distancia entre las fechas Period periodo = fechaHoy.until(fechaAyer); Puedo verla en dias, meses, . . . System.out.println(periodo.getDays()); -1 \end{lstlisting}


© 2019 Santiago Faci

apuntes/fechas.1550182364.txt.gz · Last modified: 2019/02/14 22:12 by Santiago Faci