将python UTC时间戳与字符串进行相互转换

时间:2018-12-06 00:48:49

标签: python python-3.x datetime

这是一个采用当前时间(以UTC为单位)的python代码段,将其转换为格式化的字符串并解析该字符串。 我想获得相同的时间戳,但是由于我所在的时区,所以获得了不同的时间戳。

如何重新构建与开始时相同的时间戳?

#!/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 个答案:

答案 0 :(得分:1)

在字符串中,未指定时区,因此它不被视为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偏移量。

答案 1 :(得分:0)

从字符串到没有时区的时间戳

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)