Pythonは正しいタイムゾーンで現在の時刻を取得します [重複] 質問する

Pythonは正しいタイムゾーンで現在の時刻を取得します [重複] 質問する

今使っているのは

import datetime
print(datetime.datetime.now().strftime("%X"))

現在の時刻を文字列として表示します。
問題は、私のコンピュータがEurope/Berlinタイムゾーンで動作しており、UTCへの+2のオフセットがここでは考慮されていないことです。代わりに、19:22:26ここ21:22:26で見つけた他の回答とは異なり、私は呼び出して保存しません。

datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)

しかし

datetime.datetime.now()

そこで私は次のことを試しました(そして失敗しました)。

>>> from pytz import timezone
>>> datetime.datetime.now().astimezone(timezone('Europe/Berlin'))
 ValueError: astimezone() cannot be applied to a naive datetime


編集:

答え

この質問は閉じられているため、回答として投稿できません

この問題が発生したサーバーはもう存在しません。とにかく、他に確認する価値のある点がいくつかあります。

  • サーバー/システムのタイムゾーンは正しく設定されていますか?
    • VM または Docker コンテナがホストと同期していない可能性があります。確認する価値があります。
  • そのコンピューターの時刻は正しいですか? タイムゾーンを変更した後、+2 時間になっていませんか?

ベストアンサー1

ローカルタイムゾーンの現在の時刻を単純な datetime オブジェクトとして取得するには:

from datetime import datetime
naive_dt = datetime.now()

予想した時間が返されない場合は、コンピュータの設定が間違っていることを意味します。まずそれを修正する必要があります (Python とは無関係です)。

現在の時刻を UTC で単純な datetime オブジェクトとして取得するには:

naive_utc_dt = datetime.utcnow()

Python 3.3 以降で現在の時刻を aware な datetime オブジェクトとして取得するには:

from datetime import datetime, timezone

utc_dt = datetime.now(timezone.utc) # UTC time
dt = utc_dt.astimezone() # local time

tz データベースから指定されたタイムゾーンの現在の時刻を取得するには:

import pytz

tz = pytz.timezone('Europe/Berlin')
berlin_now = datetime.now(tz)

これは、DST 移行中に機能します。タイムゾーンが過去に異なる UTC オフセットを持っていた場合でも機能します。つまり、タイムゾーンが異なる時間に複数の tzinfo オブジェクトに対応する場合でも機能します。

おすすめ記事