我想在两个时间串之间线性插值一些点。在
所以我试着把字符串转换成日期时间,然后插入一些点,然后把日期时间转换成字符串。但时区似乎不正确。在
在下面的例子中。我想在9-28 11:07:57.435”和“9-28 12:00:00.773”之间插入一点。在
#!/usr/bin/env python
import numpy as np
from time import mktime
from datetime import datetime
#-----------------------------------------#
def main():
dtstr = [
"9-28 11:07:57.435",
"9-28 12:00:00.773"
]
print "input",dtstr
dtlst = str2dt(dtstr)
floatlst = dt2float(dtlst)
bins = 3
x1 = list(np.arange(floatlst[0],floatlst[-1],(floatlst[-1]-floatlst[0])/bins))
dtlst = float2dt(x1)
dtstr = dt2str(dtlst)
print "output",dtstr
return
def str2dt(strlst):
dtlst = [datetime.strptime("2014-"+i, "%Y-%m-%d %H:%M:%S.%f") for i in strlst]
return dtlst
def dt2float(dtlst):
floatlst = [mktime(dt.timetuple()) for dt in dtlst]
return floatlst
def dt2str(dtlst):
dtstr = [dt.strftime("%Y-%m-%d %H:%M:%S %Z%z") for dt in dtlst]
return dtstr
def float2dt(floatlst):
dtlst = [datetime.utcfromtimestamp(seconds) for seconds in floatlst]
return dtlst
#-----------------------------------------#
if __name__ == "__main__":
main()
输出如下:
^{pr2}$这里有两个问题:
问题1。你对时区的看法是对的,你使用的是} 将所有内容保留在本地时间内。在
time.mktime
,它是converts struct_time to seconds assuming the input is local time,但是使用的是{a2}(自然地)转换为utc。请改用^{问题2。与本机Python
range
/xrange
一样,当您numpy.arange(x, y, z)
时,结果以x开头并向上延伸,但不包括y(except in weird floating point roundoff cases.不要依赖于此行为)。如果您想在带有浮点值的端点上保持一致的行为,请使用numpy.linspace另一方面,为什么要将日期时间转换为秒,然后再返回呢?datetime对象支持加法和减法。下面是我的建议。在
相关问题 更多 >
编程相关推荐