今使っているのは
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 オブジェクトに対応する場合でも機能します。