Конвертировать дату в datetime в Python
глупый вопрос, но есть ли встроенный способ для преобразования date до datetime в Python, т. е.. получение datetime для полуночи date? Обратное преобразование легко - datetime есть .date() метод. Мне действительно нужно вручную позвонить datetime(d.year, d.month, d.day) ?
10 ответов:
можно использовать дата и время.комбайн(дата, время); для времени, вы создаете
datetime.timeобъект инициализирован до полуночи.from datetime import date from datetime import datetime d = date.today() datetime.combine(d, datetime.min.time())
есть несколько способов, хотя я считаю, что тот, который вы упоминаете (и не нравится) является наиболее читаемым.
>>> 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)и так далее ... но в основном все они зависят от адекватно извлекать информацию из
dateобъект и вспашка его обратно в подходящий ctor или classfunction дляdatetime.
принятый ответ правильный, но я предпочел бы избежать использования
datetime.min.time()потому что для меня не очевидно, что именно он делает. Если это очевидно для вас, то больше мощности для вас. Я также чувствую то же самое оtimetupleметод и опора на заказ.на мой взгляд, самый читаемый, явный способ сделать это, не полагаясь на то, что читатель будет очень хорошо знаком с
datetimeмодуль API это:from datetime import date, datetime today = date.today() today_with_time = datetime( year=today.year, month=today.month, day=today.day, )Это мой взгляд на "явное лучше чем неявно."
можно использовать
date.timetuple()метод и распаковать оператор*.args = d.timetuple()[:6] datetime.datetime(*args)
сегодня 2016 год, я думаю, что самое чистое решение предоставляется pandas Timestamp:
from datetime import date import pandas as pd d = date.today() pd.Timestamp(d)метка времени является эквивалентом панды datetime и взаимозаменяема с ним в большинстве случаев. Проверьте:
from datetime import datetime isinstance(pd.Timestamp(d), datetime)но в случае, если вы действительно хотите ваниль datetime, вы все еще можете сделать:
pd.Timestamp(d).to_datetime()метки времени являются гораздо более мощными, чем даты, среди других при работе с часовыми поясами. На самом деле, временные метки настолько сильны, что жаль, что они таковы плохо документировано...
один из способов конвертировать из date в datetime, который еще не был упомянут:
from datetime import date, datetime d = date.today() datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
можно использовать easy_date сделать это просто:
import date_converter my_datetime = date_converter.date_to_datetime(my_date)
использование панд для преобразования даты в datetime-значений в 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)]сначала может потребоваться преобразовать даты:
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()
Я новичок в Python. Но этот код работал для меня, который преобразует указанный ввод, который я предоставляю в datetime. Вот код. Поправьте меня, если я ошибаюсь.
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
Comments