将Python UTC时间戳转换成字符串以及从字符串转换回UTC时间戳

10
以下是一段 Python 代码,它获取当前时间(以 UTC 为标准),将其转换为格式化字符串并解析该字符串。 因为所处时区的不同,我获得的时间戳与开始的时间戳不同。
如何重建与我最初使用的相同的时间戳?
#!/usr/bin/env python3  
import time
from datetime import datetime
TIME_FORMAT='%Y-%m-%d %H:%M:%S'
ts = int(time.time()) # UTC timestamp
timestamp = datetime.utcfromtimestamp(ts).strftime(TIME_FORMAT)
d1 = datetime.strptime(timestamp, TIME_FORMAT)
ts1 = int(d1.strftime("%s"))
print("Time as string : %s" % d1)
print("Source timestamp : %d" % ts)
print("Parsed timestamp : %d" % ts1)

输出:

Time as string : 2018-12-06 00:47:32
Source timestamp : 1544057252
Parsed timestamp : 1544086052
2个回答

10

在该字符串中,没有指定时区,因此它不被视为UTC时间,而是被视为您的个人时区。为了解决这个问题,您需要在解析时指定字符串为UTC时间,例如:

d1 = datetime.strptime(timestamp + "+0000", TIME_FORMAT + '%z')
ts1 = d1.timestamp()

完整的工作代码片段:

#!/usr/bin/env python3
import time
from datetime import datetime
TIME_FORMAT='%Y-%m-%d %H:%M:%S'
ts = int(time.time()) # UTC timestamp
timestamp = datetime.utcfromtimestamp(ts).strftime(TIME_FORMAT)
d1 = datetime.strptime(timestamp + "+0000", TIME_FORMAT + '%z')
ts1 = d1.timestamp()
print("Time as string : %s" % d1)
print("Source timestamp : %d" % ts)
print("Parsed timestamp : %d" % ts1)

+0000 对应于UTC偏移量。


成功了(我不小心用 Python 2 运行了它)。 - Omry Yadan
实际上,我说得太早了。 我仍然有时间差: d1 = datetime.strptime(timestamp + "+0000", TIME_FORMAT + '%z')1544063570与1544092370 - Omry Yadan
令人惊讶的是,这段代码对我来说可以工作,除了我已经用 ts1 = d1.timestamp() 替换了 ts1 = int(d1.strftime("%s")),因为我遇到了一个错误。也许这就是你的问题所在? - Axel Puig
是的,现在我得到了相同的时间戳。将使用完整的工作代码片段更新答案。再次感谢! - Omry Yadan

3

将字符串转换为没有时区的时间戳

from datetime import datetime, timezone

DATE = "2021-05-21 12:00"
ts = datetime.strptime(DATE, "%Y-%m-%d %H:%M").replace(tzinfo=timezone.utc).timestamp()
print(ts)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接