1

根据我的研究,似乎将我的时间戳存储为 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"

即使它不是日期时间对象,如何添加任意数量的时间来执行 UTC 时间戳?或者,如何从 UTC 时间戳创建日期时间对象,然后向其中添加任意时间。

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

蒂亚!

编辑/更新:

谢谢大家。我决定执行以下操作:(这是两个答案的组合,对不起,我只能接受一个!)

        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!"
4

2 回答 2

4

将 storedTime 作为datetime对象并添加一个timedelta. strptime用于将字符串解析为日期时间对象:

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

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()开始添加,因此不需要使用strptime日期时间isoformat()字符串。

>>> 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)
于 2013-01-29T04:35:15.400 回答
3

对于事情的解析方面,我喜欢使用 dateutil 模块。对我来说,它比提供的 strptime 解决方案更容易和更清洁(尽管应该可以)。

import dateutil.parser

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

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

于 2013-01-29T04:59:01.803 回答