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
有两个部分:
#!/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)
您.%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.
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)
| 归档时间: |
|
| 查看次数: |
34441 次 |
| 最近记录: |