Code

Programming Tip: attenzione al formato delle date

23 Febbraio 2021 - 2 minuti di lettura

Durante il nostro lavoro capita di avere a che fare con alcuni bug semplici da risolvere ma che allo stesso tempo ci fanno riflettere su quanto alcuni particolari siano importanti.

In questo articolo vi porterò un esempio, con relativa spiegazione con del semplice codice Java, inerente alla gestione del formato delle date.

2020 o 2021?

Un report mostrava alcune date a cavallo dell’anno 2020 e dell’anno 2021. Fin da subito avevo notato che le date fino al 31 dicembre 2020 risultavano corrette ma, con il passaggio all’anno 2021, per i primi tre giorni le date mostravano ancora l’anno 2020 e non il nuovo anno.

Analizzando il formato in cui la data veniva formattata ho trovato la seguente rappresentazione: YYYY-MM-dd leggermente diversa dalla più comune yyyy-MM-dd e infatti utilizzando il secondo formato il problema veniva risolto.

Perché?

YYYY-MM-dd vs yyyy-MM-dd – Attenzione al formato delle date

La differenza tra i formati di rappresentazione dell’anno YYYY e yyyy può creare problemi quando si passa da un anno all’altro.

Prendendo come esempio il bug appena descritto si nota che i primi tre giorni dell’anno in formato YYYY danno come risultato 2020 mentre dal 4 gennaio l’anno risulta corretto.

Usare YYYY fa in modo che l’anno di riferimento (detto anche “Week of Year” usato nel calendario ISO year-week [1]) sia quello del primo giorno della settimana che nel caso del 1 gennaio 2021 era il 28 dicembre 2020 e quindi l’anno corrispondente era il 2020.

Ecco un semplice esempio di funzione che formatta l’anno nei due differenti modi:

public static String getWeekOfYear(String date, String year) throws ParseException {
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  SimpleDateFormat yearFormat = new SimpleDateFormat(year);
    
  Date d = dateFormat.parse(date);
    
  return yearFormat.format(d);
}

Di seguito vediamo l’esito della funzione richiamata su due date formattate entrambe passando YYYY e yyyy:

String date1 = getWeekOfYear("2021-01-01", "yyyy"); //2021
String date2 = getWeekOfYear("2021-01-01", "YYYY"); //2020
String date3 = getWeekOfYear("2021-01-04", "yyyy"); //2021
String date4 = getWeekOfYear("2021-01-04", "YYYY"); //2021

Conclusioni

Il consiglio è usare sempre il formato yyyy-MM-dd in modo tale da non riscontare nessun problema nel formattare qualsiasi tipo di data, anche passando da un anno all’altro.

Articolo scritto da