代码之家  ›  专栏  ›  技术社区  ›  Joe

在Python中找到直到某个日期的时间

  •  3
  • Joe  · 技术社区  · 15 年前

    找到约会前的最佳时间是什么。我想知道年、月、日、时。

    5 回复  |  直到 15 年前
        1
  •  8
  •   Jason R. Coombs    15 年前

    你应该用 dateutil

    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__
    
        2
  •  6
  •   Cat Plus Plus    15 年前

    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
    
        3
  •  1
  •   Joe    15 年前

    我在找更像这样的东西。。。这需要一些努力才能找到。

    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"
    
        4
  •  1
  •   Carlos Bruguera    11 年前

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

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

        5
  •  1
  •   V. Sambor    8 年前

    你可能想要这样的东西:

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