utcoffset 方法在 datetime 中做什么 - Python

Cur*_*bda 5 python datetime

我知道这个问题的答案通常是“转到Python 的文档”。我已经阅读了它,但仍然不是 100% 确定 uctcoffset 方法的作用。

我假设它需要时区 - UTC 并给出差异,但我需要 100% 确定。

Pau*_*aul 6

a 的utcoffset方法datetime为您提供了日期时间的“挂钟”时间与 UTC 中同一时间点的“挂钟”时间之间的差异,因此,正如您所期望的 ( dt - dt_as_utc)。它是一个函数的原因是对于许多时区(例如那些有夏令时的时区),偏移量在一年中会发生变化。举个例子:

from datetime import datetime, timedelta
from dateutil import tz

NYC = tz.gettz('America/New_York')  # Note: ambiguous time support
                                    # requires version >= 2.6.0, be aware.

dt1 = datetime(2015, 5, 21, 12, 0, tzinfo=NYC)    # EST
dt2 = datetime(2015, 12, 21, 12, 0, tzinfo=NYC)   # EDT

print(dt1.utcoffset() / timedelta(hours=1))
# -4
print(dt1.tzname())
# EDT


print(dt2.utcoffset() / timedelta(hours=1))
# -5
print(dt2.tzname())
# EST
Run Code Online (Sandbox Code Playgroud)

如您所见,这同样适用于该tzname()函数。对于天真的日期时间(没有日期时间的那些),utcoffset()并且tzname()都应该返回None.

作为一个说明,我通常建议使用此功能来计算UTC时间戳,相反,你应该使用astimezone()有两种dateutil.tz.tzutcpytz.UTC或者,如果你正在使用Python版本> = 3.2,则可以使用datetime.timezone.utc对象。


zab*_*ech 2

是的,它正在做你认为它做的事情。是官方文档。

编辑:准确地说,它不需要时区,它需要 0 个参数。您在一个日期对象上调用它,该对象有一个与之关联的时区(如果它是时区感知的)。在这种情况下,该方法将返回一个 timedelta 对象,它表示 datetime 对象的时区与 utc 之间的差异