在Python中查找日期之前的时间

时间:2009-10-16 20:28:25

标签: python

找到约会时间的最佳方法是什么。我想知道几年,几个月,几天和几个小时。

我希望有人有一个很好的功能。我想做点什么之类的:这条评论发布于2个月前和3天前或者此评论发布于1年5个月之前。

5 个答案:

答案 0 :(得分:8)

你应该使用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 :(得分:5)

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

答案 2 :(得分: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"

答案 3 :(得分:1)

让我们假设你在一个名为eta的变量中有未来的日期时间:

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

日期时间差异导致timedelta对象,这恰好实现了一个名为total_seconds的方法。就是这样:))

答案 4 :(得分:1)

可能你想要这样的东西:

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