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 タイムスタンプから日時オブジェクトを作成し、それに任意の時間を追加するにはどうすればよいですか。

2 つの datetime オブジェクトがあれば、d1 > d2 を実行できることがわかります。オブジェクトを取得するのに問題があります。

ティア!

編集/更新:

みんな、ありがとう。私は次のことを行うことにしました: (これは両方の回答の組み合わせです。申し訳ありませんが、1つしか受け入れられません!)

        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()に使用する必要はありません。strptimeisoformat()

>>> 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の質問がありました。この回答については、こちらを参照してください。

于 2013-01-29T04:59:01.803 に答える