我想知道特定的python日期时间对象是否超过X小时或分钟。我正在尝试做类似的事情:
if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
这会产生类型错误。
在python中进行日期时间比较的正确方法是什么?我已经看过WorkingWithTime这个很近但不完全是我想要的。我假设我只想要以秒为单位表示的datetime对象,以便我可以进行正常的int比较。
请发布日期时间最佳做法列表。
答案 0 :(得分:110)
使用datetime.timedelta
类:
>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True
你的例子可以写成:
if (datetime.now() - self.timestamp) > timedelta(seconds = 100)
或
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
答案 1 :(得分:5)
将差异与您创建的timedelta进行比较:
if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
print 'older'
答案 2 :(得分:5)
替代:
if (datetime.now() - self.timestamp).total_seconds() > 100:
假设self.timestamp是一个日期时间实例
答案 3 :(得分:1)
您可以结合使用返回对象的'days'和'seconds'属性来找出答案,如下所示:
def seconds_difference(stamp1, stamp2):
delta = stamp1 - stamp2
return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.
如果您总是想要正秒数,请在答案中使用abs()。
要发现时间戳到过去的秒数,您可以像这样使用它:
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
pass
答案 4 :(得分:0)
您可以减去两个datetime个对象以找出它们之间的差异
您可以使用datetime.fromtimestamp
来解析POSIX时间戳。
答案 5 :(得分:0)
像这样:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"
答案 6 :(得分:0)
将您的时间增量转换为秒,然后使用转换回经过的小时数和剩余的分钟数。
start_time=datetime(
year=2021,
month=5,
day=27,
hour=10,
minute=24,
microsecond=0)
end_time=datetime.now()
delta=(end_time-start_time)
seconds_in_day = 24 * 60 * 60
seconds_in_hour= 1 * 60 * 60
elapsed_seconds=delta.days * seconds_in_day + delta.seconds
hours= int(elapsed_seconds/seconds_in_hour)
minutes= int((elapsed_seconds - (hours*seconds_in_hour))/60)
print("Hours {} Minutes {}".format(hours,minutes))