Convertir la date en datetime en Python
Question stupide, mais existe-t-il une méthode intégrée pour convertir un date
en un datetime
en Python, c'est-à-dire. obtenir le datetime
pour le minuit du date
? La conversion inverse est facile - datetime
a une méthode .date()
. Dois - je vraiment appeler manuellement datetime(d.year, d.month, d.day)
?
10 réponses
Vous pouvez utiliser datetime.combinez (date, heure); pour l'heure, vous créez un objet datetime.time
initialisé à minuit.
from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())
Il y a plusieurs façons, bien que je crois que celui que vous mentionnez (et n'aimez pas) est le 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 dépendent tous de l'extraction appropriée des informations de l'objet date
et de leur retour dans le ctor ou classfunction approprié pour datetime
.
La réponse acceptée est correcte, mais je préférerais éviter d'utiliser datetime.min.time()
parce que ce n'est pas évident pour moi exactement ce qu'il fait. Si c'est évident pour vous, alors plus de pouvoir pour vous. Je ressens aussi la même chose à propos de la méthode timetuple
et de la dépendance à la commande.
À mon avis, la façon la plus lisible et la plus explicite de le faire sans compter sur le lecteur pour être très familier avec L'API du module datetime
est:
from datetime import date, datetime
today = date.today()
today_with_time = datetime(
year=today.year,
month=today.month,
day=today.day,
)
C'est mon point de vue sur "explicite est mieux qu'implicites."
Vous pouvez utiliser la méthode date.timetuple()
et déballer l'opérateur *
.
args = d.timetuple()[:6]
datetime.datetime(*args)
Aujourd'hui étant 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)
Timestamp est l'équivalent 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 vanille, vous pouvez toujours faire:
pd.Timestamp(d).to_datetime()
Les horodatages sont beaucoup plus puissants que les datetimes, entre autres lorsqu'il s'agit de fuseaux horaires. En fait, les horodatages sont si puissants qu'il est dommage qu'ils soient si mal documentés...
Une façon de convertir de date en datetime 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 le rendre facile:
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
Utilisation de pandas pour convertir une série de dates en datetimes python:
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()
Si vous avez besoin quelque chose de rapide, datetime_object.date()
vous donne une date d'un objet datetime.
Je suis un débutant à Python. Mais ce code a fonctionné pour moi qui convertit l'entrée spécifiée que je fournis en datetime. Voici le code. Corrigez-moi si je me trompe.
import sys
from datetime import datetime
from time import mktime, strptime
user_date = '02/15/1989'
if user_date is not None:
user_date = datetime.strptime(user_date,"%m/%d/%Y")
else:
user_date = datetime.now()
print user_date