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