apuntes:fechas
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
apuntes:fechas [2019/02/14 22:12] – Santiago Faci | apuntes:fechas [2023/06/04 21:18] (current) – [Conversiones de fechas (Date <-> LocalDate)] Santiago Faci | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Fecha y hora ====== | ====== 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 este tema veremos la nueva API para gestión de fechas que se introdujo en Java 8. Comprenden clases y métodos | + | ===== Tipos para almacenar fechas |
- | fechas y poder trabajar con ellos. Les echaremos un vistazo a los tipos y operaciones más comunes para trabajar con fechas | + | |
- | tiempo. | + | |
- | \section{Tipos para almacenar fechas} | + | ==== LocalDate ==== |
- | \subsection{LocalDate} | + | La clase '' |
- | La clase \verb LocalDate | + | < |
- | necesitar mediante métodos \emph{getter}. | + | |
- | + | ||
- | \begin{lstlisting}[language=java] | + | |
// La fecha de hoy | // La fecha de hoy | ||
LocalDate fechaHoy = LocalDate.now(); | LocalDate fechaHoy = LocalDate.now(); | ||
Line 27: | Line 22: | ||
int numeroMes = fecha.getMonthValue(); | int numeroMes = fecha.getMonthValue(); | ||
int numeroAno = fecha.getYear(); | int numeroAno = fecha.getYear(); | ||
- | \end{lstlisting} | + | </ |
- | \subsection{LocalTime} | + | ==== LocalTime |
- | La clase \verb LocalTime | + | La clase '' |
- | \begin{lstlisting}[language=java] | + | < |
LocalTime ahora = LocalTime.now(); | LocalTime ahora = LocalTime.now(); | ||
Line 39: | Line 34: | ||
int minutos = ahora.getMinute(); | int minutos = ahora.getMinute(); | ||
int segundos = ahora.getSecond(); | int segundos = ahora.getSecond(); | ||
- | \end{lstlisting} | + | </ |
- | \subsection{DayOfWeek} | + | ==== DayOfWeek |
Esta enumeración permite almacenar valores que representan el día de la semana | 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 | // Podemos almacenar un día de la semana | ||
DayOfWeek diaSemana = DayOfWeek.MONDAY; | DayOfWeek diaSemana = DayOfWeek.MONDAY; | ||
Line 53: | Line 48: | ||
// Hace dos días | // Hace dos días | ||
diaSemana = diaSemana.minus(2); | 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: | 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; | DayOfWeek diaSemana = DayOfWeek.FRIDAY; | ||
Locale locale = new Locale(" | Locale locale = new Locale(" | ||
Line 64: | Line 59: | ||
System.out.println(diaSemana.getDisplayName(TextStyle.NARROW, | System.out.println(diaSemana.getDisplayName(TextStyle.NARROW, | ||
System.out.println(diaSemana.getDisplayName(TextStyle.SHORT, | System.out.println(diaSemana.getDisplayName(TextStyle.SHORT, | ||
- | \end{lstlisting} | + | </ |
- | \subsection{Month} | + | ==== Month ==== |
Esta enumeración permite almacenar valores que representan un mes | Esta enumeración permite almacenar valores que representan un mes | ||
- | \begin{lstlisting}[language=java] | + | < |
// Podemos almacenar un mes | // Podemos almacenar un mes | ||
Month mes = Month.NOVEMBER; | Month mes = Month.NOVEMBER; | ||
Line 81: | Line 76: | ||
mes = mes.minus(2); | mes = mes.minus(2); | ||
System.out.println(mes); | System.out.println(mes); | ||
- | \end{lstlisting} | + | </ |
También podemos obtener su representación por pantalla en función de la configuración de idioma de nuestra aplicación: | 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; | Month mes = Month.NOVEMBER; | ||
Locale locale = new Locale(" | Locale locale = new Locale(" | ||
Line 92: | Line 87: | ||
System.out.println(mes.getDisplayName(TextStyle.NARROW, | System.out.println(mes.getDisplayName(TextStyle.NARROW, | ||
System.out.println(mes.getDisplayName(TextStyle.SHORT, | System.out.println(mes.getDisplayName(TextStyle.SHORT, | ||
- | \end{lstlisting} | + | </ |
- | \section{Operaciones con fechas} | + | ===== 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 | + | 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. |
- | fechas de Java también proporciona métodos para realizar operaciones con estos datos. | + | |
- | \begin{lstlisting}[language=java] | + | < |
LocalDate fechaHoy = LocalDate.now(); | LocalDate fechaHoy = LocalDate.now(); | ||
System.out.println(" | System.out.println(" | ||
System.out.println(fechaHoy.minus(Period.ofWeeks(3))); | System.out.println(fechaHoy.minus(Period.ofWeeks(3))); | ||
System.out.println(fechaHoy.plus(Period.ofDays(35))); | System.out.println(fechaHoy.plus(Period.ofDays(35))); | ||
- | \end{lstlisting} | + | </ |
+ | |||
+ | === Formatear una fecha === | ||
También se puede formatear el valor de la fecha para que pueda ser representado como una cadena de texto y viceversa: | 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 | // Pasa la fecha a una representación en String | ||
String cadenaFecha = fechaHoy.format(DateTimeFormatter.ofPattern(" | String cadenaFecha = fechaHoy.format(DateTimeFormatter.ofPattern(" | ||
+ | |||
+ | === Parsear una fecha === | ||
// Pasa la representación en String a un valor de fecha | // Pasa la representación en String a un valor de fecha | ||
LocalDate.parse(cadenaFecha, | LocalDate.parse(cadenaFecha, | ||
- | \end{lstlisting} | + | </ |
Se pueden ver más ejemplos de formatos de fecha y patrones en la API de Java correspondiente a | Se pueden ver más ejemplos de formatos de fecha y patrones en la API de Java correspondiente a | ||
- | la \href{https:// | + | la [[https:// |
+ | |||
+ | === Comparar dos fechas === | ||
También es posible comparar dos fechas entre ellas directamente para saber cuál es anterior/ | También es posible comparar dos fechas entre ellas directamente para saber cuál es anterior/ | ||
- | \begin{lstlisting}[language=java] | + | < |
LocalDate fechaHoy = LocalDate.now(); | LocalDate fechaHoy = LocalDate.now(); | ||
LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1)); | LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1)); | ||
Line 128: | Line 128: | ||
System.out.println(fechaHoy.isBefore(fechaAyer)); | System.out.println(fechaHoy.isBefore(fechaAyer)); | ||
System.out.println(fechaHoy.equals(fechaAyer)); | System.out.println(fechaHoy.equals(fechaAyer)); | ||
- | \end{lstlisting} | + | </ |
- | De forma muy similar, podremos realizar estas mismas operaciones con horas utilizando el tipo de datos \verb LocalTime | + | De forma muy similar, podremos realizar estas mismas operaciones con horas utilizando el tipo de datos '' |
- | arriba. | + | |
Y saber cuál es la distancia entre dos fechas determinadas: | Y saber cuál es la distancia entre dos fechas determinadas: | ||
- | \begin{lstlisting}[language=java] | + | < |
LocalDate fechaHoy = LocalDate.now(); | LocalDate fechaHoy = LocalDate.now(); | ||
LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1)); | LocalDate fechaAyer = LocalDate.now().minus(Period.ofDays(1)); | ||
Line 143: | Line 142: | ||
// Puedo verla en dias, meses, . . . | // Puedo verla en dias, meses, . . . | ||
System.out.println(periodo.getDays()); | System.out.println(periodo.getDays()); | ||
- | \end{lstlisting} | + | </ |
+ | |||
+ | ==== Conversiones de fechas (Date <-> LocalDate) ==== | ||
+ | |||
+ | === De java.util.Date a LocalDate === | ||
+ | |||
+ | <code java> | ||
+ | fechaDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() | ||
+ | </ | ||
+ | |||
+ | === De java.util.Date a LocalDateTime === | ||
+ | |||
+ | <code java> | ||
+ | Instant.ofEpochMilli(fechaDate.getTime()) | ||
+ | .atZone(ZoneId.systemDefault()) | ||
+ | .toLocalDateTime(); | ||
+ | </ | ||
+ | |||
+ | === De LocalDateTime a java.util.Date === | ||
+ | |||
+ | <code java> | ||
+ | java.util.Date.from(fechaLocalDateTime | ||
+ | .atStartOfDay() | ||
+ | .atZone(ZoneId.systemDefault()) | ||
+ | .toInstant(); | ||
+ | </ | ||
+ | |||
+ | === De LocalDate a java.util.Date === | ||
+ | |||
+ | <code java> | ||
+ | java.util.Date.from(fechaLocalDate.atZone(ZoneId.systemDefault()) | ||
+ | .toInstant(); | ||
+ | </ | ||
+ | |||
+ | === De LocalDate a java.sql.Date === | ||
+ | |||
+ | <code java> | ||
+ | java.sql.Date.valueOf(localDate); | ||
+ | </ | ||
+ | |||
+ | === De java.sql.Date a LocalDate === | ||
+ | |||
+ | <code java> | ||
+ | LocalDate localDate = new java.sql.Date(date.getTime()).toLocalDate(); | ||
+ | </ | ||
+ | |||
+ | === De java.sql.Date a java.util.Date === | ||
+ | |||
+ | <code java> | ||
+ | java.util.Date fechaUtilDate = new java.util.Date(fechaSqlDate.getTime()); | ||
+ | </ | ||
+ | |||
+ | === De java.util.Date a java.sql.Date === | ||
+ | <code java> | ||
+ | java.sql.Date fechaSqlDate = new java.sql.Date(fechaUtilDate.getTime()); | ||
+ | </ | ||
---- | ---- | ||
- | (c) 2019 Santiago Faci | + | (c) 2019-{{date> |
apuntes/fechas.1550182364.txt.gz · Last modified: 2019/02/14 22:12 by Santiago Faci