【问题标题】:Python storing and comparing timestampsPython存储和比较时间戳
【发布时间】:2013-01-12 14:18:30
【问题描述】:

根据我的研究,似乎将我的时间戳存储为 UTC(不是本地的,完整的,例如:2013-01-29 02:11:11.151996+00:00)是常态。

在检索时间时,我想检查一个时间窗口是否已过。所以,

currentTime = datetime.utcnow()
storedTime  = '2013-01-29 02:11:11.151996+00:00'

if (storedTime + 60) > currentTime:
    print "60 or more has elapsed, do something again"

即使不是 datetime 对象,如何添加任意数量的时间来生成 UTC 时间戳?或者,如何从 UTC 时间戳创建一个 datetime 对象,然后为其添加任意时间。

我知道一旦我有两个日期时间对象,我就可以做 d1 > d2。我只是在获取对象时遇到了麻烦。

TIA!

编辑/更新:

谢谢大家。我决定做以下事情:(这是两个答案的组合,抱歉我只能接受一个!)

        lastTime = dateutil.parser.parse(subDict['last'])
        utcNow = datetime.datetime.utcnow().replace(tzinfo=tz.tzutc())

        if lastTime + datetime.timedelta(seconds=subDict['interval']) < utcNow:
            print "Time elapsed, do something!"

【问题讨论】:

    标签: python datetime utc timestamp


    【解决方案1】:

    将 storedTime 作为datetime 对象并添加timedeltastrptime 用于将字符串解析为日期时间对象:

    (格式字符串的详细信息请参考链接)

    currentTime = datetime.datetime.utcnow()
    s = '2013-01-29 02:11:11.151996+00:00'
    storedTime = datetime.datetime.strptime(s[:-6], "%Y-%m-%d %H:%M:%S.%f")
    if storedTime + datetime.timedelta(minutes=60) > currentTime:
        print "stuff..."
    

    注意:从 3.7 开始添加了 .fromisoformat(),因此对于 isoformat() 日期时间字符串无需使用 strptime

    >>> datetime.datetime.fromisoformat('2013-01-29 02:11:11.151996+00:00')
    datetime.datetime(2013, 1, 29, 2, 11, 11, 151996, tzinfo=datetime.timezone.utc)
    

    【讨论】:

    【解决方案2】:

    在解析方面,我喜欢使用 dateutil 模块。对我来说,它比提供的 strptime 解决方案更简单、更干净(尽管应该可以)。

    import dateutil.parser
    
    stored_time = dateutil.parser.parse('2013-01-29 02:11:11.151996+00:00')
    

    但是,这很容易! :) 您现在尝试比较本地和时区感知值时会遇到问题。有几个 SO questions 处理这个问题。您可能想阅读此one here 的答案。

    【讨论】:

    • 不错!我一直使用 strptime,但最终不得不一直查找格式字符串字段。
    • @monkut 哈哈。我也是! :) 当我发现这个时我真的很高兴。
    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2012-07-09
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多