1. ホーム
  2. python

[解決済み] pytzでdatetimeオブジェクトがローカライズされているかどうかを確認する方法は?

2023-05-26 15:32:33

質問

ローカライズされたUTCタイムゾーンを持つdatetimeオブジェクトを格納したいのですが、ローカライズされたUTCタイムゾーンを持つdatetimeオブジェクトを格納する方法はありますか?datetimeオブジェクトを格納するメソッドには、ローカライズされていないdatetime(ナイーブ)オブジェクト、またはすでにローカライズされているオブジェクトを指定することができます。ローカライズが必要かどうかを判断するにはどうすればよいですか?

if条件が欠落しているコードです。

class MyClass:
  def set_date(self, d):
    # what do i check here?
    # if(d.tzinfo):
      self.date = d.astimezone(pytz.utc)
    # else:
      self.date = pytz.utc.localize(d)

どのように解決するのですか?

<ブロッククオート

ローカライズが必要かどうか、どのように判断すればよいですか?

から datetime ドキュメント :

  • datetimeオブジェクト d が認識されている場合。

    d.tzinfo is not None and d.tzinfo.utcoffset(d) is not None
    
    
  • d がナイーブである場合。

    d.tzinfo is None or d.tzinfo.utcoffset(d) is None
    
    

ただし、もし d がUTCタイムゾーンの時間を表すdatetimeオブジェクトであれば、両方のケースで使用することができます。

self.date = d.replace(tzinfo=pytz.utc)

とは関係なく動作する d がタイムゾーンを意識しているかどうかには関係なく動作します。

注意してください。 は使用しないでください。 datetime.replace() メソッドを、固定でない utc オフセットのあるタイムゾーンで使用してはいけません。 を使用しないでください (UTCタイムゾーンで使用することは可能ですが、それ以外の場合は tz.localize() メソッドを使うべきです)。