13

ローカルタイムゾーンオフセットの取得を自動化しようとしていますが、問題が発生しています。私はもう試した:

print time.timezone/3600

これは、夏時間と非DSTを自動的に調整しないため、(現在は間違っている)オフセットを取得します。

私も試しました:

now_utc = pytz.utc.localize(datetime.datetime.now())
now_mst = now_utc.astimezone(pytz.timezone('US/Mountain'))

これにより正しいオフセット値が取得されますが、「US / Mountain」部分を自動的に設定したいので、オフセットを取得するために手動で何も入力する必要はありません。

DSTおよび非DSTで自動的に調整される正しいオフセットを取得する方法はありますか?

このスクリプトは、さまざまな地域の複数のサーバーで実行します。可能であれば、tzオフセットを自動的に取得したいと思います。

4

1 に答える 1

17

これにはdateutilモジュールを使用できます。今すぐローカルタイムゾーンを取得するには:

>>> import dateutil.tz
>>> import datetime
>>> localtz = dateutil.tz.tzlocal()
>>> localtz.tzname(datetime.datetime.now(localtz))
'EDT'

私は現在、東部夏時間にいます。夏時間が元に戻った後、将来的にESTに戻ることがわかります。

>>> localtz.tzname(datetime.datetime.now(localtz) +
                   datetime.timedelta(weeks=20))
'EST'

UTCからのオフセットが必要な場合は、utcoffset関数を使用できます。タイムデルタを返します。

>>> localtz.utcoffset(datetime.datetime.now(localtz))
datetime.timedelta(-1, 72000)

この場合、私はUTC-4なので、-1日+20時間を返します。それが必要な場合は、時間を時間に変換できます。

>>> localoffset = localtz.utcoffset(datetime.datetime.now(localtz))
>>> localoffset.total_seconds() / 3600
-4.0
于 2012-08-18T02:05:22.950 に答える