Python で「タイムゾーン対応」の datetime.today() の値を取得するにはどうすればよいですか? 質問する

Python で「タイムゾーン対応」の datetime.today() の値を取得するにはどうすればよいですか? 質問する

datetime.datetime.today()何かがどれくらい前だったかを計算するために、の値から 1 つの日付値を減算しようとしています。 しかし、次のようなエラーが表示されます:

TypeError: can't subtract offset-naive and offset-aware datetimes

からの戻り値はdatetime.datetime.today()「タイムゾーン対応」ではないようですが、他の日付値は対応しています。 からの戻り値をdatetime.datetime.today()タイムゾーン対応にするにはどうすればよいでしょうか?

理想的な解決策は、タイムゾーンを自動的に認識することです。

現時点では、現地時間で時刻が表示されていますが、これは PST、つまり UTC - 8 時間です。最悪の場合、datetime返されるオブジェクトにタイムゾーン値を手動で入力してdatetime.datetime.today()、UTC-8 に設定する方法はありますか?

ベストアンサー1

標準ライブラリでは、独自のタイムゾーンクラスを作成せずに、クロスプラットフォームでタイムゾーンを認識する方法はありません。(編集: Python 3.9では、zoneinfoこの機能を提供する標準ライブラリにはありません。

Windowsでは がありますwin32timezone.utcnow()が、これはpywin32の一部です。pytzライブラリには、ほとんどのタイムゾーンのデータベースが常に更新されています。

ローカル タイムゾーンでの作業は非常に難しい場合があります (以下の「さらに詳しく読む」リンクを参照)。そのため、特に 2 つの時点の差を計算するなどの算術演算の場合は、アプリケーション全体で UTC を使用することをお勧めします。

現在の日付/時刻は次のように取得できます:

import pytz
from datetime import datetime
datetime.utcnow().replace(tzinfo=pytz.utc)

これに留意しdatetime.today()、UTC 時間ではなくローカルdatetime.now()時間を返すようにしてください。そのため、それらに適用すると正しくありません。.replace(tzinfo=pytz.utc)

もう一つのよい方法は次のとおりです。

datetime.now(pytz.utc)

これは少し短く、同じことを行います。


多くの場合 UTC を優先する理由については、以下を参照してください。

おすすめ記事