我已成功将格式为 26 Sep 2012
的某些内容转换为 26-09-2012
,使用的方法是:
datetime.strptime(request.POST['sample_date'],'%d %b %Y')
但是,我不知道如何将上述内容的小时和分钟设置为11:59。有谁知道怎么做吗?
请注意,这可以是未来日期或任意随机日期,而不仅仅是当前日期。
我已成功将格式为 26 Sep 2012
的某些内容转换为 26-09-2012
,使用的方法是:
datetime.strptime(request.POST['sample_date'],'%d %b %Y')
但是,我不知道如何将上述内容的小时和分钟设置为11:59。有谁知道怎么做吗?
请注意,这可以是未来日期或任意随机日期,而不仅仅是当前日期。
使用 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
。
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
如果你有一个 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)
将日期时间转换为最大值 [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)
date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59)
即可。我使用了额外的变量,以便该行不会太长 :) - nneonneodatetime.replace
返回一个新的 拷贝datetime
对象(因为datetime
是不可变的):在这方面它类似于str.replace
。 - nneonneor = dt.replace(hour=0, minute=0, second=0, microsecond=0)
。如果您需要一个日期对象,请运行:r = dt.date()
。 - Flimm