如何将给定的序号(从Excel)转换为date

我有一个价值38142我需要使用python将其转换为date格式。 如果在Excel中使用这个数字,并做一个右键单击和格式单元格的时间值将被转换为04/06/2004,我需要使用python相同的结果。 我怎样才能做到这一点

从1900年1月1日起在Excel中的偏移量; 添加天数作为timedelta:

 from datetime import date, timedelta def from_excel_ordinal(ordinal, _epoch=date(1900, 1, 1)): if ordinal > 59: ordinal -= 1 # Excel leap year bug, 1900 is not a leap year! return _epoch + timedelta(days=ordinal - 1) # epoch is day 1 

1900/02/28之后的任何一天我都要调整序数2 ; Excelinheritance了Lotus 1-2-3的闰年错误 ,将1900年视为闰年。 上面的代码返回5960 date(1900, 2, 28)来纠正这个问题。

 from datetime import datetime, timedelta def from_excel_ordinal(ordinal, epoch=datetime(1900, 1, 1)): # Adapted from above, thanks to @Martijn Pieters if ordinal > 59: ordinal -= 1 # Excel leap year bug, 1900 is not a leap year! inDays = int(ordinal) frac = ordinal - inDays inSecs = int(round(frac * 86400.0)) return epoch + timedelta(days=inDays - 1, seconds=inSecs) # epoch is day 1 excelDT = 42548.75001 # Float representation of 27/06/2016 6:00:01 PM in Excel format pyDT = from_excel_ordinal(excelDT) 

上面的答案只是一个date值的罚款,但在这里我扩展上述解决scheme,以包括时间,并返回一个date时间值。