web-dev-qa-db-fra.com

Convertir la date en date / heure dans Python

Existe-t-il une méthode intégrée pour convertir une date en datetime en Python, par exemple pour obtenir le datetime pour le minuit de la date donnée? La conversion opposée est facile: datetime a une méthode .date().

Dois-je vraiment appeler manuellement datetime(d.year, d.month, d.day)?

547
EMP

Vous pouvez utiliser datetime.combine (date, heure); pour le moment, vous créez un objet datetime.time initialisé à minuit.

from datetime import date
from datetime import datetime

dt = datetime.combine(date.today(), datetime.min.time())
694
kiamlaluno

Il y a plusieurs façons, bien que je pense que celle que vous mentionnez (et que vous n'aimez pas) est la plus lisible.

>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)

et ainsi de suite - mais fondamentalement, ils reposent tous sur l'extraction appropriée des informations de l'objet date et leur insertion dans le ctor ou fonction de classe approprié pour datetime.

114
Alex Martelli

La réponse acceptée est correcte, mais je préférerais éviter d’utiliser datetime.min.time(), car ce n’est pas évident pour moi de savoir exactement ce que cela fait. Si c'est évident pour vous, alors plus de pouvoir pour vous. Je ressens la même chose à propos de la méthode timetuple et de la confiance accordée à la commande.

À mon avis, la manière la plus lisible et explicite de faire cela sans compter sur le lecteur pour être très familier avec l'API du module datetime est la suivante:

from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year, 
    month=today.month,
    day=today.day,
)

C'est mon opinion sur "Explicite, c'est mieux qu'implicite".

59
Wes Winham

Vous pouvez utiliser la méthode date.timetuple() et décompresser l'opérateur *.

args = d.timetuple()[:6]
datetime.datetime(*args)
41
teepark

Aujourd'hui, en 2016, je pense que la solution la plus propre est fournie par pandas Timestamp:

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

L'horodatage est l'équivalent de pandas de datetime et est interchangeable avec lui dans la plupart des cas. Vérifier:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

Mais si vous voulez vraiment un datetime Vanilla, vous pouvez toujours faire:

pd.Timestamp(d).to_datetime()

Les horodatages sont beaucoup plus puissants que les datetime, notamment lorsqu'il s'agit de fuseaux horaires. En fait, les horodatages sont si puissants que c'est dommage qu'ils soient si mal documentés ...

7
kadee

Une façon de convertir une date en une heure qui n’a pas encore été mentionnée:

from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
4
kadee

Vous pouvez utiliser easy_date pour simplifier les choses:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
3
Raphael Amoedo

to_datetime() est obsolète, maintenant il s'appelle to_pydatetime()

0
Oleg O

Utilisation de pandas pour convertir une série de dates en python dat heures:

dates = pd.DataFrame(
    {'date': pd.DatetimeIndex(start='2017-01-01', end='2017-01-5', freq='D')})
>>> dates
        date
0 2017-01-01
1 2017-01-02
2 2017-01-03
3 2017-01-04
4 2017-01-05

>>> pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
[datetime.datetime(2017, 1, 1, 0, 0),
 datetime.datetime(2017, 1, 2, 0, 0),
 datetime.datetime(2017, 1, 3, 0, 0),
 datetime.datetime(2017, 1, 4, 0, 0),
 datetime.datetime(2017, 1, 5, 0, 0)]

On peut d’abord avoir besoin de convertir les dates:

dates = pd.DataFrame(
        {'date': ['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05']})
dates['date'] = pd.DatetimeIndex(dates['date'])
pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
0
Alexander