Преобразование даты в datetime в Python
10 ответов
можно использовать datetime.объединить(дата, время); для времени вы создаете 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()
временные метки намного мощнее, чем даты, среди прочего, при работе с часовыми поясами. На самом деле, временные метки настолько мощные, что жаль, что они так плохо документировано...
один из способов преобразования даты в 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)
использование панд для преобразования ряда дат в даты 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