web-dev-qa-db-fra.com

Convertir la date d'Excel au format numérique en format de date python

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

16
user2728024
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)
18
saeedgnu

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))
7
zveryansky