如何检查日期时间对象是否使用 pytz 本地化?

2022-01-16 00:00:00 python datetime timezone pytz

问题描述

我想存储一个具有本地化 UTC 时区的日期时间对象.可以给存储 datetime 对象的方法一个非本地化的 datetime (naive) 对象或已经本地化的对象.如何确定是否需要本地化?

I want to store a datetime object with a localized UTC timezone. The method that stores the datetime object can be given a non-localized datetime (naive) object or an object that already has been localized. How do I determine if localization is needed?

缺少 if 条件的代码:

Code with missing if condition:

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)


解决方案

如何确定是否需要本地化?

How do I determine if localization is needed?

来自 <代码>日期时间文档:

  • 一个日期时间对象 d 知道 iff:

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
    

  • 虽然如果 d 是表示 UTC 时区时间的日期时间对象,那么您可以在这两种情况下使用:

    Though if d is a datetime object representing time in UTC timezone then you could use in both cases:

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

    无论 d 是时区感知还是幼稚,它都能正常工作.

    It works regardless d is timezone-aware or naive.

    注意:不要使用带有非固定时区的 datetime.replace() 方法UTC 偏移量(可以将其与 UTC 时区一起使用,否则应使用 tz.localize() 方法).

    Note: don't use datetime.replace() method with a timezone with a non-fixed utc offset (it is ok to use it with UTC timezone but otherwise you should use tz.localize() method).

    相关文章