Estandarización de fechas

Limpieza de datos en Java

Dennis Lee

Software Engineer

Por qué importa estandarizar fechas

  • Formatos distintos: barras, guiones, puntos
  • Inconsistencias: difícil ordenar o calcular métricas temporales
  • Solución: estandarizar fechas

 

 

Product Name Date Received
Bell Pepper 3/1/25
Vegetable Oil 04-01-2025
Cheese 2025.06.01
Limpieza de datos en Java

Convertir cadenas a LocalDate

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// Especificar el formato esperado (M/d/yy)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yy");

// Convertir cadena a LocalDate LocalDate date = LocalDate.parse("3/1/25", formatter); System.out.println("Fecha convertida desde cadena: " + date);
Date converted from string: 2025-03-01
Limpieza de datos en Java

Estandarizar formatos de fecha distintos

String[] dates = {"3/1/25", "04-01-2025", "2025.06.01"}; // Formatos de entrada
DateTimeFormatter[] formatters = { // Formatos esperados en la entrada
    DateTimeFormatter.ofPattern("M/d/yy"), // Mes y día sin cero a la izquierda
    DateTimeFormatter.ofPattern("MM-dd-yyyy"), // Mes y día con cero a la izquierda
    DateTimeFormatter.ofPattern("yyyy.MM.dd")
};


System.out.println("Fechas estandarizadas:"); for (int i = 0; i < dates.length; i++) { LocalDate date = LocalDate.parse(dates[i], formatters[i]); // Convertir a fecha System.out.println("Formato " + dates[i] + " como " + date1); }
Limpieza de datos en Java

Estandarizar formatos: salida

Fechas estandarizadas:
Formato 3/1/25 como 2025-03-01
Formato 04-01-2025 como 2025-04-01
Formato 2025.06.01 como 2025-06-01
Limpieza de datos en Java

Formatear fechas para mostrar

// Fecha de entrada de ejemplo
LocalDate date = LocalDate.parse("2025-03-01");

// Mostrar como March 1, 2025
DateTimeFormatter displayFormat = DateTimeFormatter.ofPattern("MMMM d, yyyy");

// Formatear la fecha al formato deseado String formattedDate = date.format(displayFormat); System.out.println("Fecha formateada: " + formattedDate);
Formatted date: March 1, 2025
Limpieza de datos en Java

Trabajar con zonas horarias

import java.time.ZoneId;
LocalDate date = LocalDate.parse("2025-03-01"); // Fecha de entrada de ejemplo

ZonedDateTime nyTime = date.atStartOfDay(ZoneId.of("America/New_York")); // Convertir el mismo momento a hora de LA ZonedDateTime laTime = nyTime.withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
System.out.println("New York time: " + nyTime); System.out.println("Los Angeles time: " + laTime);
New York time: 2025-03-01T00:00-05:00[America/New_York]
Los Angeles time: 2025-02-28T21:00-08:00[America/Los_Angeles]
Limpieza de datos en Java

Por qué falla manipular cadenas con fechas

// Incorrecto: intentar extraer mes manipulando cadenas
System.out.println("¿3/1/25 empieza por 3? " + "3/1/25".startsWith("3"));
System.out.println("¿03-15-25 empieza por 3? " + "03-15-25".startsWith("3"));

// Correcto: usar fechas estandarizadas DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-d-yy"); LocalDate date = LocalDate.parse("03-15-25", formatter); // Convertir a fecha System.out.println("Mes y año de 03-15-25: " + date.getMonth() + " " + date.getYear()); // Obtener mes/año
¿3/1/25 empieza por 3? true
¿03-15-25 empieza por 3? false

Mes y año de 03-15-25: MARCH 2025
Limpieza de datos en Java

Resumen

Importaciones clave

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
  • Indicar el patrón de entrada: DateTimeFormatter.ofPattern()
  • Convertir cadena a fecha: LocalDate.parse()
  • Indicar y convertir zonas: ZoneId.of(), .withZoneSameInstant()
  • Formatear una fecha: .format()
  • Analiza con LocalDate.parse() en lugar de manipular cadenas (.startsWith())
Limpieza de datos en Java

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...