找到时间直到某个日期的最佳方法是什么?我想知道几年,几个月,几天和几小时。在Python中查找时间
我希望有人有一个很好的功能。我想做类似这样的事情:此评论已于2个月和3天前发布,或者此评论已发布1年5个月前。
找到时间直到某个日期的最佳方法是什么?我想知道几年,几个月,几天和几小时。在Python中查找时间
我希望有人有一个很好的功能。我想做类似这样的事情:此评论已于2个月和3天前发布,或者此评论已发布1年5个月前。
datetime
模块,datetime
和timedelta
对象,它会给你几天和几秒钟。
In [5]: datetime.datetime(2009, 10, 19) - datetime.datetime.now()
Out[5]: datetime.timedelta(2, 5274, 16000)
In [6]: td = datetime.datetime(2009, 10, 19) - datetime.datetime.now()
In [7]: td.days
Out[7]: 2
In [8]: td.seconds
Out[8]: 5262
您应该使用dateutil .relativedelta。
from dateutil.relativedelta import relativedelta
import datetime
today = datetime.date.today()
rd = relativedelta(today, datetime.date(2001,1,1))
print "comment created %(years)d years, %(months)d months, %(days)d days ago" % rd.__dict__
我正在寻找更像这样的东西......这花了一些努力去寻找。
import datetime
SECOND = 1
MINUTE = 60 * SECOND
HOUR = 60 * MINUTE
DAY = 24 * HOUR
MONTH = 30 * DAY
def get_relative_time(dt):
now = datetime.datetime.now()
delta_time = dt - now
delta = delta_time.days * DAY + delta_time.seconds
minutes = delta/MINUTE
hours = delta/HOUR
days = delta/DAY
if delta < 0:
return "already happened"
if delta < 1 * MINUTE:
if delta == 1:
return "one second to go"
else:
return str(delta) + " seconds to go"
if delta < 2 * MINUTE:
return "a minute ago"
if delta < 45 * MINUTE:
return str(minutes) + " minutes to go"
if delta < 90 * MINUTE:
return "an hour ago"
if delta < 24 * HOUR:
return str(hours) + " hours to go"
if delta < 48 * HOUR:
return "yesterday"
if delta < 30 * DAY:
return str(days) + " days to go"
if delta < 12 * MONTH:
months = delta/MONTH
if months <= 1:
return "one month to go"
else:
return str(months) + " months to go"
else:
years = days/365.0
if years <= 1:
return "one year to go"
else:
return str(years) + " years to go"
让我们asume你有一个名为ETA变量未来的日期时间:
(eta - datetime.datetime.now()).total_seconds()
日期时间差异导致timedelta对象,这恰好实现了一个名为total_seconds方法。这是它:)
可能是你想要的东西是这样的:
import datetime
today = datetime.date.today()
futdate = datetime.date(2016, 8, 10)
now = datetime.datetime.now()
mnight = now.replace(hour=0, minute=0, second=0, microsecond=0)
seconds = (mnight - now).seconds
days = (futdate - today).days
hms = str(datetime.timedelta(seconds=seconds))
print ("%d days %s" % (days, hms))