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

973

在Python中,是否有内置方法可以将date转换为datetime,例如获取给定日期午夜的datetime?相反的转换很容易: datetime有一个.date()方法。

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


210
这并不是一个愚蠢的问题;日期对象应该有一个.datetime()方法,而愚蠢的是它们没有这样的方法。 - Zags
25
@Zags: 或者使用 datetime.from_date() 构造函数。 - jfs
15
不应该。日期是日期时间的子集(甚至名称中都有)。从日期时间中清楚地知道日期是什么。但反过来,一个日期是一天的时间块(通常是这样),因此它可能有许多日期时间。从日期推出什么日期时间?你不能总是写成00:00,因为如果那个时间不存在,例如夏令时跳过了它,那怎么办呢?不是很容易。 - dalore
7
夏令时在凌晨1点至2点之间进行,以避免你所描述的问题。 - Zags
3
@zags 这完全取决于源和目标时区,你可能会在凌晨1点进行夏令时更改,但这将对其他某个时区的午夜更改相应。如果你正在编程,你使用的是哪个时区?你很可能最终会尝试获取不存在的时间。我的观点仍然成立,给日期添加时间并不是一件简单的事情。然后你还要考虑你的新日期时间是否也具有时区感知性或者是天真的。 - dalore
显示剩余2条评论
14个回答

1

使用Django时区工具使dt成为具有时区意识的日期时间:

from django.utils import timezone


timezone.now().replace(*(*dt.timetuple()[:6], 0))

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())

-12
如果你需要快速的日期,datetime_object.date()会返回一个datetime对象的日期。

9
对方想要相反的结果,从“日期”转换为“日期时间”。 - Tom
从问题中:相反的转换很容易:datetime有一个.date()方法。我加粗了重点。 - Martijn Pieters

-16

我是Python的新手。但是这段代码对我很有用,它可以将我提供的指定输入转换为日期时间。以下是代码。如果我错了,请纠正我。

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

该OP拥有一个datetime.date()对象,而不是一个字符串。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接