2009-10-16 58 views
3

找到時間直到某個日期的最佳方法是什麼?我想知道幾年,幾個月,幾天和幾小時。在Python中查找時間

我希望有人有一個很好的功能。我想做類似這樣的事情:此評論已於2個月和3天前發佈,或者此評論已發佈1年5個月前。

回答

3

datetime模塊,datetimetimedelta對象,它會給你幾天和幾秒鐘。

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 
7

您應該使用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__ 
1

我正在尋找更像這樣的東西......這花了一些努力去尋找。

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" 
1

讓我們asume你有一個名爲ETA變量未來的日期時間:

(eta - datetime.datetime.now()).total_seconds() 

日期時間差異導致timedelta對象,這恰好實現了一個名爲total_seconds方法。這是它:)

0

可能是你想要的東西是這樣的:

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))