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

473
demandé sur webjunkie 2009-12-21 03:26:01

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())
597
répondu kiamlaluno 2014-08-28 08:45:56

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.

98
répondu Alex Martelli 2009-12-21 00:30:24

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."

47
répondu Wes Winham 2014-03-19 18:12:22

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

args = d.timetuple()[:6]
datetime.datetime(*args)
40
répondu teepark 2018-07-24 08:21:06

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...

5
répondu kadee 2016-01-03 12:41:47

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')
3
répondu kadee 2015-01-03 22:50:17

Vous pouvez utiliser easy_date pour le rendre facile:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
3
répondu Raphael Amoedo 2015-05-09 19:11:49

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()
0
répondu Alexander 2017-08-23 20:06:49

Si vous avez besoin quelque chose de rapide, datetime_object.date() vous donne une date d'un objet datetime.

-7
répondu Bassdread 2012-06-04 07:35:03

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
-10
répondu napier 2013-02-01 19:04:58