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)
?
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())
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
.
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".
Vous pouvez utiliser la méthode date.timetuple()
et décompresser l'opérateur *
.
args = d.timetuple()[:6]
datetime.datetime(*args)
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 ...
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')
Vous pouvez utiliser easy_date pour simplifier les choses:
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
to_datetime()
est obsolète, maintenant il s'appelle to_pydatetime()
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()