簡體   English   中英

你如何在Python中獲得兩個時間對象之間的差異

[英]How do you get the difference between two time objects in Python

我在Python中有兩個datetime.time對象,例如,

>>> x = datetime.time(9,30,30,0)
>>> y = datetime.time(9,30,31,100000)

但是,當我像對datetime.datetime對象那樣做(yx)時,我收到以下錯誤:

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    y-x
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

我需要以微秒為單位得到yx值,即在這種情況下它應該是1100000.任何想法?

datetime.time不支持對象減法,原因與它不支持對象比較的原因相同,即因為它的對象可能沒有定義它們的tzinfo屬性:

比較時間,其中a在b之前的時間被認為小於b。 如果一個comparand是天真的而另一個是知道的,則會引發TypeError。 如果兩個比較都知道並且具有相同的tzinfo屬性,則忽略公共tzinfo屬性並比較基本時間。 如果兩個比較都知道並且具有不同的tzinfo屬性,則首先通過減去它們的UTC偏移(從self.utcoffset()獲得)來調整比較。 為了阻止混合類型比較從對象地址回退到默認比較,當將時間對象與不同類型的對象進行比較時,除非比較為==或!=,否則引發TypeError。 后一種情況分別返回False或True。

您應該使用包含日期和時間的datetime.datetime

如果兩次引用一天,您可以使用date.today()告訴python日期是今天,並使用datetime.combine將日期與時間結合起來。

既然你有日期時間你可以執行減法,這將返回一個datetime.timedelta實例,該方法total_seconds()將返回秒數(它是一個包含微秒信息的float )。 因此乘以10 6即可得到微秒。

from datetime import datetime, date, time

x = time(9, 30, 30, 0)
y = time(9, 30, 31, 100000)

diff = datetime.combine(date.today(), y) - datetime.combine(date.today(), x)
print diff.total_seconds() * (10 ** 6)        # 1100000.0

你也可以使用timedeltas:

from datetime import timedelta
x = timedelta(hours=9, minutes=30, seconds=30)
y = timedelta(hours=9, minutes=30, seconds=31, microseconds=100000)
print (y - x).total_seconds() * (10 ** 6)     # 1100000.0

暫無
暫無

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

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