xap*_*ppp 5 python datetime timestamp utc
我正在使用日期时间,发现很难理解时间戳()的工作原理,我(在东海岸)想将日期时间转换为时间戳,但我发现了以下差异。谁能解释一下这两个代码的工作原理,它们的行为是否不同(大约相差四个小时)?
import datetime
datetime.datetime.utcnow().timestamp()
#1590436949.187297
datetime.datetime.now(tz=datetime.timezone.utc).timestamp()
#1590422553.042119
Run Code Online (Sandbox Code Playgroud)
这timestamp()方法返回自纪元 (1970-01-01) 以来的 POSIX 时间戳/秒,始终引用 UTC。
问题:如果您在 na\xc3\xafve 日期时间对象上调用该timestamp()方法,Python 将假定该日期时间对象保存本地时间。
尽管utcnow()indatetime.datetime.utcnow()可能另有建议,但它为您提供了 na\xc3\xafve 日期时间对象。也就是说,它不“知道”它是 UTC。因此,如果调用该timestamp()方法,Python会假定传递给该函数的日期时间对象是本地时间,并按此计算时间戳。那么这不是你能从中得到的time.time()。
另一方面,在 中datetime.datetime.now(tz=datetime.timezone.utc).timestamp(),您将一个时区感知的日期时间对象传递给timestamp()。从它给你的意义上来说,这是正确的time.time()。
插图:
\nimport datetime\nimport time\nimport dateutil\nlocaltzname = time.tzname[time.daylight]\n\n# naive:\ndt_now = datetime.datetime.now()\n# timezone-aware:\ndt_now_loc = datetime.datetime.now(dateutil.tz.gettz(localtzname))\ndt_now_utc = datetime.datetime.now(tz=datetime.timezone.utc)\n# reference:\nts = time.time()\n\nprint(dt_now.timestamp())\n# 1590424623.226529\n\nprint(dt_now_loc.timestamp())\n# 1590424623.226529\n\nprint(dt_now_utc.timestamp())\n# 1590424623.226529\n\nprint(ts)\n# 1590424623.2265291\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,即使dt_now是 na\xc3\xafve,Python 返回的时间戳与您从本地化dt_now_loc或从time.time().
总之, datetime.datetime.utcnow().timestamp()这可能会产生很大的误导,我建议避免使用它。
| 归档时间: |
|
| 查看次数: |
4360 次 |
| 最近记录: |