代码之家  ›  专栏  ›  技术社区  ›  Ryan White

python日期比较

  •  62
  • Ryan White  · 技术社区  · 16 年前

    我想知道特定的python日期时间对象是否早于x小时或分钟。我尝试做类似的事情:

    if (datetime.now() - self.timestamp) > 100
    # Where 100 is either seconds or minutes
    

    这将生成一个类型错误。

    在python中比较日期时间的正确方法是什么?我已经看过了 WorkingWithTime 这很接近,但不完全是我想要的。我假设只需要用秒来表示datetime对象,这样我就可以进行正常的int比较。

    请发布日期时间最佳实践的列表。

    6 回复  |  直到 10 年前
        1
  •  110
  •   robbyt    11 年前

    使用 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)
    
        2
  •  5
  •   William    16 年前

    将差异与您创建的时间增量进行比较:

    if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
        print 'older'
    
        3
  •  5
  •   Chong Ying Fan    13 年前

    替代方案:

    if (datetime.now() - self.timestamp).total_seconds() > 100:
    

    假设self.timestamp是日期时间实例

        4
  •  1
  •   Jerub    16 年前

    您可以使用返回对象的“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
    
        5
  •  0
  •   William Keller    16 年前

    你可以减去两个 datetime 对象来找出它们之间的区别。
    你可以使用 datetime.fromtimestamp 解析一个POSIX时间戳。

        6
  •  0
  •   Jeremy Cantrell    16 年前

    像这样:

    # self.timestamp should be a datetime object
    if (datetime.now() - self.timestamp).seconds > 100:
        print "object is over 100 seconds old"