将日期字符串解析为UTC UNIX格式

时间:2018-11-28 12:38:38

标签: python time timezone unix-timestamp utc

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

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?

1 个答案:

答案 0 :(得分:1)

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获得的值相匹配