必须有更简单的方法来处理这个问题。我有一些需要定期刷新的对象,因此我想记录它们的创建时间,检查当前时间戳,并根据需要进行刷新。
datetime.datetime证明很困难,而且我不想深入研究ctime库。有没有更简单的解决方案?
total_seconds
,例如:import datetime as dt
a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)
(b-a).total_seconds()
86400.0
#note that seconds doesn't give you what you want:
(b-a).seconds
0
import time
current = time.time()
...job...
end = time.time()
diff = end - current
这对你是否可行?
>>> from datetime import datetime
>>> a = datetime.now()
# wait a bit
>>> b = datetime.now()
>>> d = b - a # yields a timedelta object
>>> d.seconds
7
(7将是稍微等待的时间)
我发现datetime.datetime非常有用,如果你遇到了复杂或尴尬的情况,请告诉我们。
编辑:感谢@WoLpH指出,并不总是要频繁刷新以使日期时间接近。通过考虑时间间隔中的天数,您可以处理更长的时间戳差异:
>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800
d.seconds + d.days * 86400
,那么对于多天来说是正确的 ;) - Wolpha - b
,其中a
在 b
之前(即结果是负数):(a - b).seconds == 86282
而a - b == datetime.timedelta(-1, 86276, 627665)
。我认为正确的方法是使用timedelta.total_seconds()
...但这仅适用于py2.7+。 - David Wolevertotal_seconds()
是2.7及以上版本的功能,所以感谢你回答了Python 2.6的问题并给予支持。 - Joe Holloway我们在Python 2.7中拥有total_seconds()函数。 请参考以下代码,适用于Python 2.6。
import datetime
import time
def diffdates(d1, d2):
#Date format: %Y-%m-%d %H:%M:%S
return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))
d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)
另一种方法是使用时间戳值:
end_time.timestamp() - start_time.timestamp()
from datetime import datetime
date_format = "%H:%M:%S"
# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00')
time_end = str('18:00:00')
# Then get the difference here.
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)
# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;
希望这能帮到你!
.seconds
获取时间差。@property
def seconds(self):
"""seconds"""
return self._seconds
# in the `__new__`, you can find the `seconds` is modulo by the total number of seconds in a day
def __new__(cls, days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0):
seconds += minutes*60 + hours*3600
# ...
if isinstance(microseconds, float):
microseconds = round(microseconds + usdouble)
seconds, microseconds = divmod(microseconds, 1000000)
# !
days, seconds = divmod(seconds, 24*3600)
d += days
s += seconds
else:
microseconds = int(microseconds)
seconds, microseconds = divmod(microseconds, 1000000)
# !
days, seconds = divmod(seconds, 24*3600)
d += days
s += seconds
microseconds = round(microseconds + usdouble)
# ...
total_seconds 可以准确获取两个时间之间的差距
def total_seconds(self):
"""Total seconds in the duration."""
return ((self.days * 86400 + self.seconds) * 10**6 +
self.microseconds) / 10**6
总之:
from datetime import datetime
dt1 = datetime.now()
dt2 = datetime.now()
print((dt2 - dt1).total_seconds())
(b-a).microseconds
,然后除以秒(1000000)或毫秒(1000)。 - Zld Productions-60
:from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
。 - JDiMatteo(b-a).seconds
的错误答案? - enchance