Convertire date dal formato Excel al formato standard con Java

In Excel, le date sono rappresentate come numeri seriali: ad esempio, il numero 1 corrisponde al 1 gennaio 1900. Per convertire questi numeri in oggetti Date in Java, possiamo usare alcune utility della libreria Apache POI o implementare una logica manuale.

Utilizzando Apache POI

Apache POI è una libreria potente per leggere e scrivere file Microsoft Office in Java. Se stai lavorando con file Excel, è la scelta migliore per gestire le date.


import org.apache.poi.ss.usermodel.DateUtil;
import java.util.Date;

public class ExcelDateConverter {
    public static Date convertExcelDate(double excelDate) {
        return DateUtil.getJavaDate(excelDate);
    }

    public static void main(String[] args) {
        double excelDate = 45123; // Esempio: 45123 corrisponde al 1 gennaio 2023
        Date date = convertExcelDate(excelDate);
        System.out.println("Data convertita: " + date);
    }
}

La classe DateUtil gestisce anche il bug di Excel che considera il 29 febbraio 1900 come esistente (non lo era nel calendario reale).

Conversione Manuale senza Librerie Esterne

Se non vuoi dipendere da librerie esterne, puoi implementare la logica di conversione a partire dal 1 gennaio 1900. Tieni presente che Excel considera il 1900 come un anno bisestile, quindi dovrai compensare il bug del 29 febbraio 1900.


import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class ExcelDateConverterManual {
    public static Date convertExcelDate(double excelDate) {
        int days = (int) excelDate;
        // Excel considera il 29/02/1900 come esistente, quindi va sottratto 1 giorno per date >= 60
        if (days >= 60) {
            days -= 1;
        }

        Calendar calendar = new GregorianCalendar(1900, Calendar.JANUARY, 1);
        calendar.add(Calendar.DAY_OF_YEAR, days - 1);
        return calendar.getTime();
    }

    public static void main(String[] args) {
        double excelDate = 45123;
        Date date = convertExcelDate(excelDate);
        System.out.println("Data convertita: " + date);
    }
}

Questa soluzione manuale è utile in contesti semplici o quando non è possibile includere librerie esterne nel progetto.

Conclusione

Convertire una data da formato Excel a Java è un’operazione relativamente semplice. Se stai lavorando con file Excel direttamente, ti consigliamo di usare Apache POI. In alternativa, puoi gestire la conversione manualmente tenendo conto delle particolarità del sistema di data di Excel.

Torna su