1. ホーム
  2. パイソン

[解決済み] [Solved] Pythonでdatetime.day()の値を「タイムゾーンを考慮」して取得するにはどうすればよいですか?

2022-03-24 07:53:04

質問

の値から日付の値を1つ引こうとしています。 datetime.datetime.today() を使用して、何年前のことかを計算します。しかし、それは文句を言う。

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に設定しますか?

もちろん、タイムゾーンを自動的に知ることができるのが理想的です。

解決方法は?

標準ライブラリでは、独自のタイムゾーンクラスを作成することなく、認識できるタイムゾーンを作成するクロスプラットフォームの方法はありません。( 編集する Python 3.9 で導入された zoneinfo の標準ライブラリで、この機能を提供しています)。

Windowsでは win32timezone.utcnow() しかし、それはpywin32の一部です。私はむしろ pytz ライブラリ これは、ほとんどのタイムゾーンのデータベースを常に更新しています。

ローカルタイムゾーンの扱いは非常に難しいので(以下のリンクを参照)、アプリケーション全体を通してUTCを使用することをお勧めします(特に2つの時点の差を計算するような算術操作)。

このように現在の日時を取得することができます。

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

注意点 datetime.today()datetime.now() が返されます。 ローカル を適用することで、UTC時間ではなく、時刻を取得することができます。 .replace(tzinfo=pytz.utc) を追加するのは正しくありません。

もうひとつの素敵な方法として

datetime.now(pytz.utc)

の方が少し短いですが、同じようなことができます。


多くの場合、UTCを選択する理由をさらに読み、見る。