Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:fechas

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
apuntes:fechas [2019/02/14 22:12] Santiago Faciapuntes:fechas [2023/06/04 20:17] – [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 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.
  
-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 +===== 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 y períodos de +
-tiempo.+
  
-\section{Tipos para almacenar fechas}+==== LocalDate ====
  
-\subsection{LocalDate}+La clase ''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 //getter//.
  
-La clase \verb LocalDate  permite almacenar el valor de una fecha sin hora de la que podremos extraer los partes de fecha que podamos +<code java>
-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}+</code>
  
-\subsection{LocalTime}+==== LocalTime ====
  
-La clase \verb LocalTime  permite almacenar horas (hora, minuto y segundo). El funcionamiento es similar a la clase \verb LocalDate :+La clase ''LocalTime'' permite almacenar horas (hora, minuto y segundo). El funcionamiento es similar a la clase ''LocalDate'':
  
-\begin{lstlisting}[language=java]+<code 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}+</code>
  
-\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]+<code 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}+</code>
  
 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]+<code java>
 DayOfWeek diaSemana = DayOfWeek.FRIDAY; DayOfWeek diaSemana = DayOfWeek.FRIDAY;
 Locale locale = new Locale("es", "ES"); Locale locale = new Locale("es", "ES");
Line 64: Line 59:
 System.out.println(diaSemana.getDisplayName(TextStyle.NARROW, locale)); // V System.out.println(diaSemana.getDisplayName(TextStyle.NARROW, locale)); // V
 System.out.println(diaSemana.getDisplayName(TextStyle.SHORT, locale));  // vie System.out.println(diaSemana.getDisplayName(TextStyle.SHORT, locale));  // vie
-\end{lstlisting}+</code>
  
-\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]+<code 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);    // DECEMBER System.out.println(mes);    // DECEMBER
-\end{lstlisting}+</code>
  
 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]+<code java>
 Month mes = Month.NOVEMBER; Month mes = Month.NOVEMBER;
 Locale locale = new Locale("es", "ES"); Locale locale = new Locale("es", "ES");
Line 92: Line 87:
 System.out.println(mes.getDisplayName(TextStyle.NARROW, locale)); // N System.out.println(mes.getDisplayName(TextStyle.NARROW, locale)); // N
 System.out.println(mes.getDisplayName(TextStyle.SHORT, locale));  // nov System.out.println(mes.getDisplayName(TextStyle.SHORT, locale));  // nov
-\end{lstlisting}+</code>
  
-\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]+<code java>
 LocalDate fechaHoy = LocalDate.now(); LocalDate fechaHoy = LocalDate.now();
 System.out.println("Este año es bisiesto?: " + fechaHoy.isLeapYear()); // false 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.minus(Period.ofWeeks(3)));  // 2018-11-03
 System.out.println(fechaHoy.plus(Period.ofDays(35)));   // 2018-12-29 System.out.println(fechaHoy.plus(Period.ofDays(35)));   // 2018-12-29
-\end{lstlisting}+</code> 
 + 
 +=== 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]+<code 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("dd/MM/yyyy")); String cadenaFecha = fechaHoy.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
 +
 +=== 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, DateTimeFormatter.ofPattern("dd/MM/yyyy")); LocalDate.parse(cadenaFecha, DateTimeFormatter.ofPattern("dd/MM/yyyy"));
-\end{lstlisting}+</code>
  
 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://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html}{clase DateTimeFormatter}+la [[https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html|clase DateTimeFormatter]] 
 + 
 +=== Comparar dos fechas ===
  
 También es posible comparar dos fechas entre ellas directamente para saber cuál es anterior/posterior o si son iguales 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]+<code 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));   // false System.out.println(fechaHoy.isBefore(fechaAyer));   // false
 System.out.println(fechaHoy.equals(fechaAyer));     // false System.out.println(fechaHoy.equals(fechaAyer));     // false
-\end{lstlisting}+</code>
  
-De forma muy similar, podremos realizar estas mismas operaciones con horas utilizando el tipo de datos \verb LocalTime  que hemos visto más +De forma muy similar, podremos realizar estas mismas operaciones con horas utilizando el tipo de datos ''LocalTime'' que hemos visto más arriba.
-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]+<code 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());      // -1 System.out.println(periodo.getDays());      // -1
-\end{lstlisting}+</code> 
 + 
 +==== Conversiones de fechas (Date <-> LocalDate) ==== 
 + 
 +=== De Date a LocalDate === 
 + 
 +<code java> 
 +fechaDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() 
 +</code> 
 + 
 +=== De Date a LocalDateTime === 
 + 
 +<code java> 
 +Instant.ofEpochMilli(fechaDate.getTime())  
 +  .atZone(ZoneId.systemDefault()) 
 +  .toLocalDateTime(); 
 +</code> 
 + 
 +=== De LocalDate a Date === 
 + 
 +<code java> 
 +java.util.Date.from(fechaLocalDate.atStartOfDay() 
 +  .atZone(ZoneId.systemDefault()) 
 +  .toInstant(); 
 +</code> 
 + 
 +=== De LocalDate a Date ===
  
 +<code java>
 +java.util.Date.from(fechaLocalDate.atZone(ZoneId.systemDefault()) 
 +  .toInstant();
 +</code>
  
 ---- ----
  
-(c) 2019 Santiago Faci+(c) 2019-{{date>%Y}} Santiago Faci
apuntes/fechas.txt · Last modified: 2023/06/04 21:18 by Santiago Faci