在Python中将日期转换为日期时间

时间:2009-12-21 00:26:02

标签: python datetime date

是否有用于在Python中将date转换为datetime的内置方法,例如在给定日期的午夜获取datetime?相反的转换很简单:datetime.date()方法。

我是否真的必须手动拨打datetime(d.year, d.month, d.day)

13 个答案:

答案 0 :(得分:665)

您可以使用datetime.combine(日期,时间);当时,你创建一个初始化为午夜的datetime.time对象。

from datetime import date
from datetime import datetime

dt = datetime.combine(date.today(), datetime.min.time())

答案 1 :(得分:104)

有几种方法,虽然我确实认为你提到的(并且不喜欢)是最可读的方式。

>>> 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对象中适当地提取信息并将其转换回datetime的合适ctor或类函数。

答案 2 :(得分:57)

接受的答案是正确的,但我宁愿避免使用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,
)

我明白的表现好于隐性。"

答案 3 :(得分:40)

您可以使用date.timetuple()方法并解压缩运算符*

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

答案 4 :(得分:6)

今天是2016年,我认为最干净的解决方案是由pandas Timestamp提供的:

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

时间戳是大熊猫相当于日期时间,并且在大多数情况下可以与它互换。检查:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

但是如果你真的想要一个香草日期时间,你仍然可以这样做:

pd.Timestamp(d).to_datetime()

时间戳比日期时间更强大,尤其是在处理时区时。实际上,时间戳是如此强大以至于遗憾的是它们的记录很差......

答案 5 :(得分:4)

从日期到日期转换的一种方法还没有被提及:

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

答案 6 :(得分:3)

您可以使用easy_date轻松实现:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)

答案 7 :(得分:0)

使用pandas将一系列日期转换为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()

答案 8 :(得分:0)

to_datetime()已过时,现在称为to_pydatetime()

答案 9 :(得分:0)

我真的必须手动调用datetime(d.year,d.month,d.day)

不,您想打电话

date_to_datetime(dt)

您可以在项目的某些utils/time.py中实施一次:

from typing import Optional
from datetime import date, datetime

def date_to_datetime(
    dt: date,
    hour: Optional[int] = 0,
    minute: Optional[int] = 0, 
    second: Optional[int] = 0) -> datetime:

    return datetime(dt.year, dt.month, dt.day, hour, minute, second)

答案 10 :(得分:0)

你可以使用这个类:

import time 

import datetime

class TimingClass():

    def __init__(self):

        self.YEAR        = datetime.date.today().year
        self.MONTH       = datetime.date.today().month
        self.DATE        = datetime.date.today().day
        self.HOUR        = datetime.datetime.now().hour
        self.MINUTE      = datetime.datetime.now().minute
        self.SECONDS     = datetime.datetime.now().second
        
        self.TODAY       = datetime.date.today()
        self.YESTERDAY   = datetime.datetime.strftime( (self.TODAY - datetime.timedelta(days = 1)) , '%Y-%m-%d')
        self.TOMORROW   = datetime.datetime.strftime( (self.TODAY + datetime.timedelta(days = 1)) , '%Y-%m-%d')
        
        self.TODAY_datetime = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time())

答案 11 :(得分:-7)

如果您需要快速的内容,datetime_object.date()会为您提供日期时间对象的日期。

答案 12 :(得分:-10)

我是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
相关问题