簡體   English   中英

如何將增量添加到 python datetime.time?

[英]How to add delta to python datetime.time?

從:

http://docs.python.org/py3k/library/datetime.html#timedelta-objects

timedelta 對象表示持續時間,即兩個日期或時間之間的差異。

那么為什么我會出錯:

>>> from datetime import datetime, timedelta, time
>>> datetime.now() + timedelta(hours=12)
datetime.datetime(2012, 9, 17, 6, 24, 9, 635862)
>>> datetime.now().date() + timedelta(hours=12)
datetime.date(2012, 9, 16)

>>> datetime.now().time() + timedelta(hours=12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

datetime.time對象不支持添加datetime.timedelta s。

不過,有一個自然定義,時鍾算術。 你可以這樣計算:

import datetime as dt
now = dt.datetime.now()
delta = dt.timedelta(hours = 12)
t = now.time()
print(t)
# 12:39:11.039864

print((dt.datetime.combine(dt.date(1,1,1),t) + delta).time())
# 00:39:11.039864

dt.datetime.combine(...)將 datetime.time t提升到datetime.datetime對象,然后添加增量,並將結果返回到datetime.time對象。

上面的所有解決方案都太復雜了,OP 已經表明我們可以在datetime.datetimedatetime.timedelta之間進行計算,所以為什么不這樣做:

(datetime.now() + timedelta(hours=12)).time()

這是一個將timedelta添加到time的函數:

def time_plus(time, timedelta):
    start = datetime.datetime(
        2000, 1, 1,
        hour=time.hour, minute=time.minute, second=time.second)
    end = start + timedelta
    return end.time()

只要您不以跨越午夜邊界的方式添加時間,這將提供預期的結果。

這將如何工作? datetime.datetime.now().time()只返回小時、分鍾、秒等, .time()返回的沒有日期信息,只有時間。

那么,18: 18:00:00 + 8 hours應該返回什么?
這個問題沒有答案,這就是為什么你不能添加時間和時間增量。

換句話說:

18:28:44, Sep. 16, 2012 + 8 hours #makes sense: it's 2:28:44, Sep. 17, 2012
18:28:44 + 8 hours # Doesn't make sense.

可以將 datetime.time 對象拆分為可以添加的單獨整數組件。 不需要 timedelta 例如:

from datetime import datetime, time
    time_now = datetime.now().time()
    twelve_hours_time =  time(time_now.hour + 12, time_now.minute)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM