今使っています
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
この質問はクローズとマークされているため、回答として投稿できません
この問題が発生したサーバーはもう存在しません。とにかく、チェックする価値のある他の事項を以下に示します。
ローカルタイムゾーンの現在時刻を単純なdatetimeオブジェクトとして取得するには:
from datetime import datetime
naive_dt = datetime.now()
予想される時間が返されない場合は、コンピューターの構成が誤っていることを意味します。最初に修正する必要があります(Pythonとは無関係です)。
UTCの現在時刻を単純なdatetimeオブジェクトとして取得するには:
naive_utc_dt = datetime.utcnow()
現在の時刻をPython 3.3+の認識された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オブジェクトに対応している場合でも機能します。