Standardizzazione delle date

Pulizia dei dati in Java

Dennis Lee

Software Engineer

Perché la standardizzazione delle date è importante

  • Formati data diversi: slash, trattini, punti
  • Formati incoerenti: difficile ordinare o calcolare metriche temporali
  • Soluzione: standardizzare le date

 

 

Product Name Date Received
Bell Pepper 3/1/25
Vegetable Oil 04-01-2025
Cheese 2025.06.01
Pulizia dei dati in Java

Convertire date stringa in LocalDate

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// Specifica il formato atteso (M/d/yy)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yy");

// Converte stringa in LocalDate LocalDate date = LocalDate.parse("3/1/25", formatter); System.out.println("Data convertita da stringa: " + date);
Date converted from string: 2025-03-01
Pulizia dei dati in Java

Standardizzare formati data diversi

String[] dates = {"3/1/25", "04-01-2025", "2025.06.01"}; // Formati di input
DateTimeFormatter[] formatters = { // Formati attesi in input
    DateTimeFormatter.ofPattern("M/d/yy"), // Mese e giorno senza zero iniziale
    DateTimeFormatter.ofPattern("MM-dd-yyyy"), // Mese e giorno con zero iniziale
    DateTimeFormatter.ofPattern("yyyy.MM.dd")
};


System.out.println("Date standardizzate:"); for (int i = 0; i < dates.length; i++) { LocalDate date = LocalDate.parse(dates[i], formatters[i]); // Converti in data System.out.println("Format " + dates[i] + " as " + date1); }
Pulizia dei dati in Java

Standardizzare formati data: output

Date standardizzate:
Format 3/1/25 as 2025-03-01
Format 04-01-2025 as 2025-04-01
Format 2025.06.01 as 2025-06-01
Pulizia dei dati in Java

Formattare date per la visualizzazione

// Data di input di esempio
LocalDate date = LocalDate.parse("2025-03-01");

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

// Formattta la data nel formato desiderato String formattedDate = date.format(displayFormat); System.out.println("Formatted date: " + formattedDate);
Formatted date: March 1, 2025
Pulizia dei dati in Java

Lavorare con i fusi orari

import java.time.ZoneId;
LocalDate date = LocalDate.parse("2025-03-01"); // Data di input di esempio

ZonedDateTime nyTime = date.atStartOfDay(ZoneId.of("America/New_York")); // Converti lo stesso istante all'ora di 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]
Pulizia dei dati in Java

Perché le manipolazioni su stringhe falliscono con le date

// Sbagliato: estrarre il mese con operazioni su stringhe
System.out.println("Does 3/1/25 start with 3? " + "3/1/25".startsWith("3"));
System.out.println("Does 03-15-25 start with 3? " + "03-15-25".startsWith("3"));

// Corretto: usare date standardizzate DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-d-yy"); LocalDate date = LocalDate.parse("03-15-25", formatter); // Converti in data System.out.println("Mese e anno di 03-15-25: " + date.getMonth() + " " + date.getYear()); // Ottieni mese/anno
Does 3/1/25 start with 3? true
Does 03-15-25 start with 3? false

Month and year of 03-15-25: MARCH 2025
Pulizia dei dati in Java

Mettiamo tutto insieme

Import principali

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
  • Specifica il pattern di input: DateTimeFormatter.ofPattern()
  • Converti stringa in data: LocalDate.parse()
  • Imposta e converti fusi orari: ZoneId.of(), .withZoneSameInstant()
  • Formattta una data: .format()
  • Fai il parsing con LocalDate.parse() invece di manipolare stringhe (.startsWith())
Pulizia dei dati in Java

Passiamo alla pratica !

Pulizia dei dati in Java

Preparing Video For Download...