Je lis des données depuis Excel et je manipule les données en utilisant python. Mais les dates arrivent sous forme d'entiers. Comment puis-je reconvertir les dates au format de date?
15/05/2015 arrive comme 42139.00
from datetime import datetime
Excel_date = 42139
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + Excel_date - 2)
tt = dt.timetuple()
print dt
print tt
Comme mentionné par J.F. Sebastian, cette réponse ne fonctionne que pour toute date après 1900/03/01
EDIT: (en réponse à @ R.K)
Si ton Excel_date
est un nombre flottant, utilisez ce code:
def floatHourToTime(fh):
h, r = divmod(fh, 1)
m, r = divmod(r*60, 1)
return (
int(h),
int(m),
int(r*60),
)
Excel_date = 42139.23213
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(Excel_date) - 2)
hour, minute, second = floatHourToTime(Excel_date % 1)
dt = dt.replace(hour=hour, minute=minute, second=second)
Le module xlrd
fournit une fonction xldate_as_Tuple
pour convertir le format de date numérique d'Excel en un tuple (year, month, day, hour, minute, nearest_second)
.
Vous pouvez ensuite utiliser datetime.datetime
pour convertir le Tuple en un objet datetime
-.
from datetime import datetime
import xlrd
Excel_date = 44032
python_date = datetime(*xlrd.xldate_as_Tuple(Excel_date, 0))