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

use*_*031 148 python time datetime date date-manipulation

我已成功将某些26 Sep 2012格式转换为26-09-2012使用:

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

但是,我不知道如何将上述的时间和分钟设置为11:59.有谁知道如何做到这一点?

请注意,这可以是将来的日期或任何随机日期,而不仅仅是当前日期.

nne*_*neo 317

用途datetime.replace:

from datetime import datetime
date = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdate = date.replace(hour=11, minute=59)
Run Code Online (Sandbox Code Playgroud)

  • 另外值得注意的是:`datetime.replace`返回日期时间的新*副本*(因为`datetime`是不可变的):在这方面它就像`str.replace`. (14认同)
  • 是的,只需要`date = datetime.strptime('2012 Sep 26','%d%b%Y')。replace(hour = 11,minutes = 59)'。我使用了额外的变量,所以行不会太长:) (2认同)
  • @PV8 如果您想要日期时间,请运行:`r = dt.replace(hour=0, 分钟=0, Second=0, microsecond=0)`。如果您想要日期对象,请运行:`r = dt.date()` (2认同)

小智 38

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
Run Code Online (Sandbox Code Playgroud)

  • 与nneonneo发布的答案比您的答案早5年相比,您的答案有什么附加值? (4认同)

Flo*_*ker 9

如果您将日期作为datetime.datetime(或datetime.date)实例并希望通过datetime.time实例中的时间将其组合,那么您可以使用 classmethod datetime.datetime.combine

import datetime
dt = datetime.datetime(2020, 7, 1)
t = datetime.time(12, 34)
combined = datetime.datetime.combine(dt.date(), t)
Run Code Online (Sandbox Code Playgroud)


pym*_*men 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)
Run Code Online (Sandbox Code Playgroud)