我有一个字符串格式的时间戳
timestamp_str = '18:02:19 14:14:11 465872'
format_str = '%y:%m:%d %H:%M:%S %f'
并将其转换为UNIX中的UTC,我编写了以下代码
def str2utc(timestr,formatstr):
timeobj = datetime.datetime.strptime(timestr, formatstr)
time_utc = time.mktime(timeobj.timetuple())
return time_utc
timestamp_utc_unix = str2utc(timestamp_str,format_str)
但是,正如我已经知道的,如果我的系统时间不是utc,这是行不通的。我读过其他帖子,例如
Python strptime() and timezones?
但是无法解决问题。我该如何更改代码,以至于无论我的系统时间是什么,它总是在Unix中输出utc?
最佳答案
Python docs:
注意
没有方法直接从表示UTC时间的朴素的datetime实例中获取POSIX时间戳。如果您的应用程序使用此约定,并且您的系统时区未设置为UTC,则可以通过提供tzinfo = timezone.utc获得POSIX时间戳:
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
或直接计算时间戳记:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
所以你的功能看起来像
def str2utc(timestr,formatstr):
timeobj = datetime.datetime.strptime(timestr, formatstr)
time_utc = timeobj.replace(tzinfo=datetime.timezon.utc).timestamp()
return time_utc
我得到的值
1519049651.465872
与从unixtimestamp.com获得的值匹配关于python - 将日期字符串解析为UTC UNIX格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53519685/