Question Convertir la date en datetime en Python


Question stupide, mais existe-t-il une méthode intégrée pour convertir un date à un datetime en Python, c.-à-d. obtenir le datetime pour la minuit du date? La conversion inverse est facile - datetime a un .date() méthode. Dois-je vraiment appeler manuellement datetime(d.year, d.month, d.day) ?


460
2017-12-21 00:26


origine


Réponses:


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

from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())

569
2017-12-21 00:33



Il y a plusieurs façons, bien que je crois que celle que vous mentionnez (et 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 la date objet et le labourer dans le ctor approprié ou fonction de classe pour datetime.


98
2017-12-21 00:30



La réponse acceptée est correcte, mais je préférerais ne pas utiliser datetime.min.time() parce que ce n'est pas évident pour moi. Si cela vous semble évident, alors vous avez plus de pouvoir. Je ressens également la même chose à propos de la timetuple méthode et le recours à la commande.

À mon avis, la façon la plus lisible et explicite de le faire sans compter sur le lecteur pour être très familier avec le datetime Le module API 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 "explicite, c'est mieux qu'implicite".


46
2018-03-19 18:12



Vous pouvez utiliser le date.timetuple() opérateur de méthode et de décompression *.

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

40
2017-12-21 00:31



Aujourd'hui 2016, je pense que la solution la plus propre est fournie par les 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 au cas où vous voulez vraiment un datetime vanilla, vous pouvez toujours faire:

pd.Timestamp(d).to_datetime()

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


4
2018-01-03 12:41



Vous pouvez utiliser easy_date pour faciliter les choses:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)

3
2018-05-09 19:11



Une façon de convertir de date en date-heure qui n'a pas encore été mentionné:

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

2
2018-01-03 22:50



Utiliser des pandas pour convertir une série de dates en dates 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)]

Il faut d'abord 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()

1
2017-08-23 20:06



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


-6
2017-12-17 16:32



Je suis un débutant à Python. Mais ce code a fonctionné pour moi qui convertit l'entrée spécifiée que je fournis à datetime. Voici le code. Corrige 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

-9
2018-02-01 19:04