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.