Python日期时间 - 在使用strptime获取日,月,年后设置固定的小时和分钟

284

我已成功将格式为 26 Sep 2012 的某些内容转换为 26-09-2012,使用的方法是:

datetime.strptime(request.POST['sample_date'],'%d %b %Y')

但是,我不知道如何将上述内容的小时和分钟设置为11:59。有谁知道怎么做吗?

请注意,这可以是未来日期或任意随机日期,而不仅仅是当前日期。

4个回答

555

使用 datetime.replace

from datetime import datetime
dt = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdatetime = dt.replace(hour=11, minute=59)

值得一提的是:datetime.replace 返回一个新的 datetime 副本(因为 datetime 是不可变的):在这方面它类似于 str.replace


4
是的,只需执行date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59)即可。我使用了额外的变量,以便该行不会太长 :) - nneonneo
28
值得注意的是:datetime.replace 返回一个新的 拷贝 datetime 对象(因为 datetime 是不可变的):在这方面它类似于 str.replace - nneonneo
如何删除'2016-06-01'之后的所有内容,以使小时、分钟和秒消失? - PV8
3
如果您需要一个日期时间,请运行:r = dt.replace(hour=0, minute=0, second=0, microsecond=0)。如果您需要一个日期对象,请运行:r = dt.date() - Flimm

65

datetime.replace()将提供最佳选项。同时,它提供了替换日期、年份和月份的功能。

假设我们有一个datetime对象,日期表示为:"2017-05-04"

>>> from datetime import datetime
>>> date = datetime.strptime('2017-05-04',"%Y-%m-%d")
>>> print(date)
2017-05-04 00:00:00
>>> date = date.replace(minute=59, hour=23, second=59, year=2018, month=6, day=1)
>>> print(date)
2018-06-01 23:59:59

23
你的答案与nneonneo在5年前发表的答案相比,有何附加价值? - Samuel Dauzon
@SamuelDauzon,我猜这给他的用户账户增加了神奇的网络积分价值。而且,说实话,它添加了日期元素,但这可能是对nneonneo答案的编辑。 - osiris

18

如果你有一个 datetime.datetime(或者 datetime.date)实例作为日期,想要通过 datetime.time 实例的时间来合并它,那么你可以使用类方法 datetime.datetime.combine

import datetime
dt = datetime.datetime(2020, 7, 1)
t = datetime.time(12, 34)
combined = datetime.datetime.combine(dt.date(), t)

6

将日期时间转换为最大值 [23:59:59.99] 和最小值 [0:00:00] 的快捷方式

import datetime

def dt_time_min(dt):
    """converts any datetime/date to new datetime with same date and time=0:00:00"""
    return datetime.datetime.combine(dt, datetime.time.min)


def dt_time_max(dt):
    """converts any datetime/date to new datetime with same date and time=23:59:59.999999"""
    return datetime.datetime.combine(dt, datetime.time.max)

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