Herramientas de usuario

Herramientas del sitio


bloque4:fechas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:fechas [04/03/2018 12:41] – [Clase DateTimeFormatter] Fernando Valdeónbloque4:fechas [05/03/2018 11:38] (actual) – borrado Fernando Valdeón
Línea 1: Línea 1:
-======Fechas y horas======  
  
-=====paquete java.time===== 
-Con la versión 8 de Java (2014) se incluyó un nuevo paquete con un conjunto de clases que facilitan el trabajo con fechas y horas. 
- 
-Estas nuevas clases sustituyen a las viejas clases ''Date'', ''Calendar'', ''Gregorian Calendar'', etc. 
- 
-Las nuevas clases ''LocalDate'', ''LocalTime'' y ''LocalDateTime'' tienen métodos comunes que funcionan del mismo modo. 
- 
-===== Clase LocalDate ===== 
-Se usa  para  almacenar  fechas  sin  atender  a  la  zona  horaria.  Se  compone de 3 enteros: días, meses y años. Tiene una gran cantidad de métodos estáticos.  
- 
-Hay  que  tener en  cuenta  que  estas  clases  almacenan un  elemento  inmutable (una  fecha fija). Si quiero modificar su valor, debo cambiarlo a través de sus métodos y guardar el nuevo objeto. 
- 
-===== Instanciar LocalDate ===== 
-Para crear un objeto de tipo LocalDate puedo utilizar alguno de sus método estáticos. 
-LocalDate no tiene constructor, y solo se pueden crear objetos a través de sus métodos estáticos. 
- 
-<code java> 
-//Obtener la fecha de hoy (basada en el reloj del Sistema) 
- 
-LocalDate fechaActual = LocalDate.now(); 
- 
-//Obtener una fecha cualquiera 
-LocalDate fecha = LocalDate.of(2018, 3, 23);  
-//Almacena la fecha de 23-3-2018 
- 
-//Para obtener una fecha a partir de un String 
-LocalDate fecha = LocalDate.parse("2007-12-03"); 
-</code> 
- 
- 
-===== Métodos de instancia===== 
-''LocalDate fechaActual = LocalDate.now();'' 
- 
-  * ''fechaActual.toString()'' : Obtengo un String con la fecha 
-  * ''fechaActual.compareTo(fecha)'' : Compara 2 fechas: devuelve int negativo si fechaActual es anterior, positivo si es posterior, 0 si es igual 
-  * ''fechaActual.isBefore(fecha)'' : Indica si una fecha es anterior a otra. ''true'' si fechaActual es anterior a fecha 
-  * ''fechaActual.isAfter(fecha)'' : Indica si una fecha es posterior a otra. ''true'' si fechaActual es posterior a fecha 
-  * ''fechaActual.getYear()'' : Devuelve un int con el año 
-  * ''fechaActual.getMonthValue()'' : Devuelve un int con el mes (1-12) 
-  * ''fechaActual.getDayOfMonth()'' : Devuelve un int con el día del mes 
-  * ''fechaActual.getDayOfWeek()'' : Devuelve un int con el día de la semana (1-7) 
-  * ''fechaActual = fechaActual.minusDays(30)'' : Devuelve la fecha contenida restándole 30 días 
-  * ''fechaActual.minusMonths(4)'' : Devuelve la fecha contenida restándole 4 meses. 
-  * ''fechaActual.minusYears(5)'' : Devuelve la fecha contenida restándole 5 años. 
-  * ''fechaActual.plusDays(30)'' : Devuelve la fecha contenida sumándole 30 días. 
-  * ''fechaActual.plusMonths(4)'' : Devuelve la fecha contenida sumándole 4 meses. 
-  * ''fechaActual.plusYears(5)'' : Devuelve la fecha contenida sumándole 5 años. 
-  * ''fechaActual.withDayOfMonth(7)'' : Devuelve la fecha contenida, cambiando el día a 7 
-  * ''fechaActual.withMonth(3)'' : Devuelve la fecha contenida, cambiando el mes a 3 
-  * ''fechaActual.withYear(2015)'' : Devuelve la fecha contenida, cambiando el año a 2015 
- 
-Recordar que el objeto LocalDate no cambia nunca, por lo que el nuevo objeto generado hay que guardarlo en una variable: 
- 
-''fechaActual = fechaActual.plusDays(234);'' 
- 
- 
-===== Clase Period ===== 
-Podemos usar esta clase simplemente para calcular el tiempo que pasa entre 2 fechas ''LocalDate''. Es útil para calcular edades de forma correcta. 
- 
-<code java> 
-LocalDate fecha1 = LocalDate.now(); 
-LocalDate fecha2 = LocalDate.Parse("2000-04-01"); 
- 
-Period diferencia = Period.between(fecha2, fecha1); 
- 
-//Muestra los días de diferencia 
-System.out.println(diferencia.getDays()); 
- 
- 
-//Muestra los meses de diferencia 
-System.out.println(diferencia.getMonths()); 
- 
-//Muestra los años de diferencia 
-System.out.println(diferencia.getYears()); 
- 
-</code> 
- 
-===== Clase LocalDateTime ===== 
-Esta clase funciona igual que la clase LocalDate. La diferencia es que guarda una fecha y una hora. 
- 
-  * Obtener fecha y hora actual: 
-''LocalDateTime fechaHora = LocalDateTime.now()'' 
- 
-  * Crear una fecha con hora concreta (25-7-2016 22:11:30) 
-''LocalDateTime dateTime = LocalDateTime.of(2016, 7, 25, 22, 11, 30)'' 
- 
-  * Modificar una fecha 
-<code java> 
-LocalDateTime dateTime = LocalDateTime.of(2016, 7, 25, 22, 11, 30); 
-LocalDateTime dateTime1 = dateTime.withYear(2017); 
-LocalDateTime dateTime2 = dateTime.withMonth(8); 
-LocalDateTime dateTime3 = dateTime.withDayOfMonth(27); 
-LocalDateTime dateTime4 = dateTime.withHour(20); 
-LocalDateTime dateTime5 = dateTime.withMinute(25); 
-LocalDateTime dateTime6 = dateTime.withSecond(23); 
-LocalDateTime dateTime7 = dateTime.withNano(24); 
-</code> 
- 
-===== Clase LocalTime ===== 
-Funciona igual que las anteriores pero solo almacena una hora. 
- 
-<code java> 
-//Hora actual 
-LocalTime horaActual = LocalTime.now(); 
- 
-//Almacenar una hora cualquiera (15:45:59) 
-LocalTime hora = LocalTime.of(15, 45, 59); 
- 
-//Almacenar una hora a partir de un String 
-LocalTime hora = LocalTime.parse("23:12:59"); 
- 
-//Siempre en formato hh-mm-ss 
-</code> 
- 
-**Métodos de instancia** 
- 
-getMinute(), getSecond(), getHour(), minusHours(), plusHours(), minusMinutes(), plusMinutes(), minusSeconds(),  plusSeconds(), withHour(), withMinute(), etc. 
- 
-<code java> 
-LocalTime time = LocalTime.of(14, 30, 35); //14:30:35 
-LocalTime time1 = time.withHour(20); //20:30:35 
-LocalTime time2 = time.withMinute(25); //14:25:35 
-LocalTime time3 = time.withSecond(23); //14:30:23 
-LocalTime time4 = time.withNano(24); //14:30:35.000000024 
-LocalTime time5 = time.with(ChronoField.HOUR_OF_DAY, 23); //23:30:35 
-</code> 
- 
- 
- 
-===== Clase DateTimeFormatter ===== 
-Mediante esta clase podemos mostrar o leer fechas y horas en el formato que deseamos. Por ejemplo, 23/7/2017 para una fecha o 1-27-45 para una hora. 
- 
-Para  dar  formato  a  las  fechas  tenemos  algunos  comodines para representar cada valor (dias, meses, años, etc. Veamos cuales son los más importantes. 
- 
-^Caracter^Valor que representa^ 
-|**y, u**|año en formato de cuatro o dos dígitos (2014 o 14)| 
-|**d**|número del día del mes en cuestión (27)| 
-|**M**|mes del año en forma numérica (01-12)| 
-|**D**|número de día del año (225)| 
-|**L**|mes del año en texto| 
-|**H**|hora| 
-|**m**|minutos| 
-|**s**|segundos| 
-|**a**| periodo del día (am, pm)| 
- 
-De esto modo podemos crear patrones del tipo: 
- 
-''dd/MM-yyyy'' -> fecha formato dd/mm/aaaa 
- 
-En la API de Java de la clase [[https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html|DateTimeFormatter]] se pueden ver todos los formatos. 
-==== Uso de DateTimeFormatter ==== 
- 
-Crear un DateTimeFormatter, aplicádole un patrón distinto: 
-<code java> 
-DateTimeFormatter formateador = DateTimeFormatter.ofPattern("d/M/y"); 
-</code> 
- 
-Obtener la fecha de hoy: 
- 
-<code java> 
-LocalDate fecha = LocalDate.now() 
-</code> 
- 
-Mostrar la fecha de hoy, con el formato establecido en el DateTimeFormatter: 
- 
-<code java> 
-//Muestra la fecha en formato día/mes/año 
-System.out.println(fecha.format(formateador)); 
-System.out.println(formateador.format(fecha)); 
-</code> 
- 
-Muestrar o almacenar una fecha obtenida en un formato distinto: 
-<code java> 
-System.out.println(LocalDate.parse("3/12/2015", formateador)); 
- 
-fecha = fecha.parse(“3/12/2015”, formateador);  
-</code> 
----- 
- 
-(c) {{date> %Y}} Fernando Valdeón 
bloque4/fechas.1520167311.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)