[Python] 你知道 datetime.utcnow().timestamp() 不是 Unix Timestamp

原文:[Python] 你知道 datetime.utcnow().timestamp() 不是 Unix Timestamp 吗?

最近在开发 Auth Module 的时候有用到 Unix Timestamp 来做验证,原先我的开发环境都是在 Container 下所以时区都是 UTC+0
不过自己写的小工具是在 UTC+8 的环境开发,于是乎学习到了 Python 的 bug (feature)...

原先我的 testing tool 是使用以下程式码来取得 Unix Timestamp

from datetime import datetimedatetime.utcnow().timestamp()

但我发现这样 Server 总是回我 Client 与自己的时间相差过大 (??
看到错误讯息我马上去检查是不是我的 local environment 时间没有校对,检查校对后重新再试一次又得到了同样的错误讯息

接着我想说死马当活马医乾脆用一般的方式拿 Unix Timestamp 试试看好了程式码如下

from datetime import datetimedatetime.now().timestamp()

竟然 pass 了!!!

到底花生神魔术,马上拿关键字去餵狗得到一篇 Using datetime.datetime.utcnow().timestamp() in Python3.6.0 can't get correct UTC timestamp.

大意是说 datetime.utcnow()tzinfo = None 所以呼叫 timestamp() 的时候会帮你做减去当前时区再取得 Timestamp 的动作,而这样的行爲会造成无法取得预期 Unix Timestamp,原来...这不是 bug 这是 feature ...

嗯好... 总结一下取得 Unix Timestamp 的方法有两种:

time.time()datetime.now().timestamp()


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章