私はUTCタイムゾーンにdatetime
を持っています、例えば:
utc_time = datetime.datetime.utcnow()
そして、pytzタイムゾーンオブジェクト:
tz = timezone('America/St_Johns')
utc_time
を指定されたタイムゾーンに変換する適切な方法は何ですか?
私はそれを得たと思う:
pytz.utc.localize(utc_time, is_dst=None).astimezone(tz)
この行は、最初にナイーブ(タイムゾーンを認識しない)utc_time
datetime
オブジェクトからタイムゾーン(UTC)を含むdatetime
オブジェクトへ。次に、 astimezone
関数を使用して、要求されたタイムゾーンに従って時間を調整します。
arrow を使用することをお勧めしますか?質問を理解した場合:
>>> import arrow
>>> utc = arrow.utcnow()
>>> utc
<Arrow [2014-08-12T13:01:28.071624+00:00]>
>>> local = utc.to("America/St_Johns")
>>> local
<Arrow [2014-08-12T10:31:28.071624-02:30]>
使用することもできます
tz.fromutc(utc_time)
fromutc
関数の正確な目的です:
tz.fromutc(utc_time)
(astimezone
関数は内部でfromutc
を呼び出しますが、最初にUTCに変換しようとしますが、これは必要ありません)
ツァッハの答えに同意します。 is_dstパラメーターが不要であることを含めたいだけです。
pytz.utc.localize(datetime.utcnow()).astimezone(tz)
そのコードは、現在のUTC時間をタイムゾーン対応の現在の日時に変換します。
以下のコードは、現在のUTC時間を、必ずしも現在ではないタイムゾーン対応の日時に変換します。タイムゾーンはUTC時間値に追加されます。
tz.localize(datetime.utcnow())
別の非常に簡単な方法:
utcnow
メソッドはnaiveオブジェクトを返すため、naiveオブジェクトをawareオブジェクトに変換する必要があります。 replace
メソッドを使用すると、naiveオブジェクトをawareオブジェクトに変換できます。次に、astimezone
メソッドを使用して、異なるタイムゾーンで新しいdatetimeオブジェクトを作成できます。
from datetime import datetime
import pytz
utc_time = datetime.utcnow()
tz = pytz.timezone('America/St_Johns')
utc_time =utc_time.replace(tzinfo=pytz.UTC) #replace method
st_john_time=utc_time.astimezone(tz) #astimezone method
print(st_john_time)
以下のサンプルも使用できます。同様のタスクに使用します
tz = pytz.timezone('America/St_Johns')
time_difference=tz.utcoffset(utc_time).total_seconds() #time difference between UTC and local timezones in 5:30:00 format
utc_time = date + timedelta(0,time_difference)
それは高速に動作し、追加のライブラリをインポートする必要はありません。