为什么 datetime.datetime.now().timestamp() 和 datetime.datetime.utcnow().timestamp() 之间存在差异?

TeX*_*obe 6 python timezone datetime epoch python-3.5

据我了解,自 Unix 纪元(1970-01-01 00:00:00 UTC )以来的秒数在全球各地都应该相同,因为它固定为 UTC。

现在,如果您所在的时区有几个小时 +/- UTC,为什么这样做会得到不同的时间戳(在我的情况下为+2 小时)

>>> datetime.datetime.utcnow().timestamp()
1523622844.637763
>>> datetime.datetime.now().timestamp()
1523630048.558158
Run Code Online (Sandbox Code Playgroud)

如果考虑到我运行第二行代码所花费的时间,您会得出两个时间戳之间存在 7200 秒(2 小时)差异的结论。这些时间戳不应该是不知道时区的吗?

flo*_*urr 3

来自文档

  • datetime.now():返回当前本地日期和时间。
  • datetime.utcnow():返回当前 UTC 日期和时间 [...]。这类似于now(),但返回当前 UTC 日期和时间,作为一个天真的datetime

举个例子:

抵消

In [1]: datetime.datetime.now()
Out[1]: datetime.datetime(2018, 4, 13, 17, 8, 4, 457551)

In [2]: datetime.datetime.utcnow()
Out[2]: datetime.datetime(2018, 4, 13, 15, 8, 5, 385598)
Run Code Online (Sandbox Code Playgroud)

无偏移

In [3]: datetime.datetime.now(tz=pytz.utc)
Out[3]: datetime.datetime(2018, 4, 13, 15, 8, 59, 590874, tzinfo=<UTC>)

In [4]: datetime.datetime.utcnow()
Out[4]: datetime.datetime(2018, 4, 13, 15, 9, 1, 494370)
Run Code Online (Sandbox Code Playgroud)