【问题标题】:Add time to datetime将时间添加到日期时间
【发布时间】:2015-09-21 23:39:59
【问题描述】:

我有一个这样的日期字符串,然后使用strptime() 所以它是这样的

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%Y')

现在我想将 23 小时 59 分钟添加到 my_time

我尝试了.timedelta,但它不起作用?我怎么能这样做?

【问题讨论】:

  • 您使用的代码是什么?它对我有用
  • 您是否在询问您是否已“尝试”但尚未发布的代码有效?如果您知道它不起作用,您希望有人在没有看到代码的情况下告诉您什么?

标签: python datetime time python-datetime


【解决方案1】:

首先,根据您提供的日期字符串,format 似乎是错误的,您应该使用 %y(小 y)表示 2 位数年份,%Y(大写 Y)表示 4 位数年份.

然后您可以使用 timedelta 将时间添加到 my_time,如下所示,但是添加操作会生成一个新的 datetime 对象,不会更改 my_time 到位。

因此,您需要像这样将其分配回您的 my_time -

>>> import datetime

>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
>>> my_time = my_time + datetime.timedelta(hours=23,minutes=59)
>>> my_time
datetime.datetime(2015, 7, 5, 23, 59)

【讨论】:

  • 我不知道为什么,但它会抛出错误AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'。我的代码看起来像 from datetime import datetime; newTime = passedTime + datetime.timedelta()
  • 这个答案帮助我解决了这个问题stackoverflow.com/a/12906456/9277453
  • 如果有人遇到与 Alexey Nikonov 相同的错误:您需要执行 import datetime; newTime = passedTime + datetime.timedelta()。 Alexey 本质上是 import datetime; newTime = passedTime + datetime.datetime.timedelta(),因为他将导入构建为 from datetime import datetime
【解决方案2】:

之后添加时间;你可以使用datetime.replace() method 来生成一个新的datetime 对象:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time = my_time.replace(hour=23, minute=59)

datetime.strptime() 将小时和分钟值设置为默认值 0。请注意,对于两位数的年份(如 15),您应该使用 %y,而不是 %Y,后者是四位数的年份。

您还可以使用datetime.combine() class methoddatetime 对象配对:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time = datetime.datetime.combine(my_time.date(), datetime.time(23, 59))

如果您觉得必须使用timedelta(),请注意添加它会再次生成一个新的datetime 对象。您可以使用增强分配将其“就地”添加:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time += datetime.timedelta(hours=23, minutes=59)

演示:

>>> import datetime
>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
>>> my_time.replace(hour=23, minute=59)
datetime.datetime(2015, 7, 5, 23, 59)
>>> datetime.datetime.combine(my_time.date(), datetime.time(23, 59))
datetime.datetime(2015, 7, 5, 23, 59)
>>> my_time + datetime.timedelta(hours=23, minutes=59)
datetime.datetime(2015, 7, 5, 23, 59)

【讨论】:

  • 如果您需要添加一个负数或超过一天的金额,那么只有 timedelta() 解决方案可以工作。
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多