10

オブジェクトのスケジュールされた公開で機能を実装しています。ユーザーが公開する時間を選択し、毎分実行して公開する時間かどうかを確認するcronタスクを作成しました。

ユーザーはさまざまなタイムゾーンから来ています。

だから私は2つの日時を比較する必要があります:

>>user_chosen_time
datetime.datetime(2012, 12, 4, 14, 0, tzinfo=tzinfo(120))
>>curdate=datetime.datetime.now()
datetime.datetime(2012, 12, 4, 18, 4, 20, 17340)
>>user_chosen_time==curdate
*** TypeError: can't compare offset-naive and offset-aware datetimes

かなりばかげた質問で申し訳ありませんが、私はこれについて議論する必要があります。ありがとう

4

2 に答える 2

9

エラーが示すように、「オフセットなしの日時とオフセット対応の日時を比較することはできません」。つまり、両方ともタイムゾーンに対応している、または両方ともタイムゾーンに対応していない(タイムゾーンに対応していない)2つの日時を比較する必要があります。コードでは、curdateにタイムゾーン情報がないため、タイムゾーン対応のuser_chosen_timeと比較できませんでした。

まず、各日時に正しいタイムゾーンを割り当てる必要があります。次に、異なるタイムゾーンの2つの日時を直接比較できます。

例(pytzを使用):

import pytz
import datetime as dt

# create timezone
nytz=pytz.timezone('America/New_York')
jptz=pytz.timezone('Asia/Tokyo')

# randomly initiate two timestamps
a=dt.datetime(2018,12,13,11,2)
b=dt.datetime(2018,12,13,22,45)

# assign timezone to timestamps
a=nytz.localize(a)
b=jptz.localize(b)

# a = datetime.datetime(2018, 12, 13, 11, 2, tzinfo=<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)
# b = datetime.datetime(2018, 12, 13, 22, 45, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

a>b # True
b>a # False

他の方法については、Python標準ライブラリのみを使用してPython UTC日時をローカル日時に変換するを参照できますか?。

于 2018-12-13T16:09:39.760 に答える
4

http://pytz.sourceforge.net/は、タイムゾーンの違いを排除したいときに調べたい場所です:)

編集:あなたの問題についてもっと多くの情報を与えるかもしれないSOでこの投稿を見つけました

于 2012-12-04T16:16:13.377 に答える