为了账号安全,请及时绑定邮箱和手机立即绑定

解析包含纳秒的日期时间字符串

解析包含纳秒的日期时间字符串

慕虎7371278 2019-11-03 15:04:46
我有一些时间格式为HH:MM :: SS.nano_seconds的日志文件(例如01:02:03.123456789)。我想在python中创建一个日期时间,这样我就可以在时间上整齐地做数学运算(例如,取时差)。使用%f,strptime在微秒内效果很好。Python日期时间模块是否真的不支持纳秒级?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您可以很自然地使用纳秒级甚至更精确的时间单位(ps,fs,as)numpy。Numpy有自己的Datetimes和Timedeltas实现,因此您可以尝试np.datetime64:


import numpy as np

def str_to_ns(time_str):

     """

     input: time in a format `hh:mm:ss.up_to_9_digits`

     """

     h, m, s = time_str.split(":")

     int_s, ns = s.split(".")

     ns = map(lambda t, unit: np.timedelta64(t, unit),

              [h,m,int_s,ns.ljust(9, '0')],['h','m','s','ns'])

     return sum(ns)

然后,您可以通过以下方式使用此功能:


>>> src = "1:2:34.123456789"

>>> out = str_to_ns(src)

>>> print(out)

3754123456789 nanoseconds

>>> out / np.timedelta64(1,'h')

1.0428120713302778

>>> out / np.timedelta64(1,'m')

62.568724279816664

>>> out / np.timedelta64(1,'s')

3754.123456789

算术也是可能的:


>>> t1, t2 = str_to_ns("1:0:12.12345678"), str_to_ns("1:0:12.12")

>>> t1 - t2

numpy.timedelta64(3456780,'ns')

我同意这不是很自然,但是通过这种方式,您可以使用just获得任意的高时间精度numpy。



查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 447 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信