如何将python timestamp string转换为epoch?

Rol*_*ndo 8 python timestamp epoch

我有以下字符串:

mytime = "2009-03-08T00:27:31.807Z"
Run Code Online (Sandbox Code Playgroud)

如何在python中将其转换为epoch?

我试过了:

import time
p = '%Y-%m-%dT%H:%M:%S'
int(time.mktime(time.strptime(s, p)))
Run Code Online (Sandbox Code Playgroud)

但它不适用于31.807Z.

jfs*_*jfs 18

有两个部分:

  1. 将时间字符串转换为细分时间.请参阅如何在python中解析ISO格式的日期?
  2. 将UTC时间转换为"自纪元以来的秒数"(POSIX时间戳).
#!/usr/bin/env python
from datetime import datetime

utc_time = datetime.strptime("2009-03-08T00:27:31.807Z", "%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = (utc_time - datetime(1970, 1, 1)).total_seconds()
# -> 1236472051.807
Run Code Online (Sandbox Code Playgroud)

如果您确定要忽略一秒的小数并获得整数结果:

#!/usr/bin/env python
import time
from calendar import timegm

utc_time = time.strptime("2009-03-08T00:27:31.807Z", "%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = timegm(utc_time)
# -> 1236472051
Run Code Online (Sandbox Code Playgroud)

为了支持对应于一个闰秒如时间戳Wed July 1 2:59:60 MSK 2015,你可以使用的组合time.strptime()以及datetime(如果你关心闰秒,你应该考虑到微秒太).


aSa*_*ary 16

dateutil最近又被添加回 python 包中,它是一个简单的衬垫,可以自行处理格式化。

from dateutil import parser
strtime = '2009-03-08T00:27:31.807Z'
epoch = parser.parse(strtime).timestamp()
Run Code Online (Sandbox Code Playgroud)


Pad*_*ham 8

您.%fZ的格式字符串中缺少.

p = '%Y-%m-%dT%H:%M:%S.%fZ'
Run Code Online (Sandbox Code Playgroud)

转换为纪元的正确方法是使用datetime:

from datetime import datetime

p = '%Y-%m-%dT%H:%M:%S.%fZ'
mytime = "2009-03-08T00:27:31.807Z"
epoch = datetime(1970, 1, 1)
print((datetime.strptime(mytime, p) - epoch).total_seconds())
Run Code Online (Sandbox Code Playgroud)

如果要忽略分数,请调用int.


Jor*_*ley 5

dateutil 是我发现的唯一一个正确处理时区偏移标识符 ( Z) 的库

pip install python-dateutil
Run Code Online (Sandbox Code Playgroud)

然后

from dateutil.parser import parse as date_parse
print date_parse("2009-03-08T00:27:31.807Z")
#get timestamp

import calendar
dt =  date_parse("2009-03-08T00:27:31.807Z")
timestamp1 = calendar.timegm(dt.timetuple())
Run Code Online (Sandbox Code Playgroud)