85

ローカライズされた 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)
4

4 に答える 4

148

ローカリゼーションが必要かどうかを判断するにはどうすればよいですか?

datetimeドキュメントから:

  • datetime オブジェクトdは次の場合に認識されます。

    d.tzinfo is not None and d.tzinfo.utcoffset(d) is not None
    
  • dナイーブです iff:

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

ifdが UTC タイムゾーンの時間を表す datetime オブジェクトである場合は、両方のケースで使用できます。

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

dタイムゾーン対応かナイーブかに関係なく機能します。

注:固定されていない utc オフセットを持つタイムゾーンでメソッドを使用しないdatetime.replace()でください(UTC タイムゾーンで使用しても問題ありませんが、それ以外の場合はtz.localize()メソッドを使用する必要があります)。

于 2014-12-22T05:14:58.380 に答える
26

datetime オブジェクト 'd' がローカライズされているかどうかを確認したい場合は、d.tzinfo を確認します。None の場合はローカライズされていません。

于 2011-04-27T09:51:43.567 に答える