我有一个字符串格式的时间戳

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/

10-15 12:53