Python 如何将具有纳秒的历元时间转换为人类可读的时间?
我有一个以纳秒为单位的大纪元时间戳,例如自1970-01-01以来的Python 如何将具有纳秒的历元时间转换为人类可读的时间?,python,time,epoch,nanotime,Python,Time,Epoch,Nanotime,我有一个以纳秒为单位的大纪元时间戳,例如自1970-01-01以来的1360287003083988472纳秒 Python datetime对象和转换方法仅支持毫秒精度 有没有一种简单的方法可以将这个历元时间转换为人类可读的时间?首先,将其转换为具有第二精度的对象(地面,而不是四舍五入): 然后,要使其易于阅读,请对返回的对象使用以下方法: >>> s = dt.strftime('%Y-%m-%d %H:%M:%S') >>> s '2013-02-07
1360287003083988472
纳秒
Python datetime对象和转换方法仅支持毫秒精度
有没有一种简单的方法可以将这个历元时间转换为人类可读的时间?首先,将其转换为具有第二精度的对象(地面,而不是四舍五入):
然后,要使其易于阅读,请对返回的对象使用以下方法:
>>> s = dt.strftime('%Y-%m-%d %H:%M:%S')
>>> s
'2013-02-07 17:30:03'
最后,再加上纳秒精度:
>>> s += '.' + str(int(1360287003083988472 % 1000000000)).zfill(9)
>>> s
'2013-02-07 17:30:03.083988472'
实际上,Python的
datetime
方法处理的是微秒精度,而不是毫秒:
但如果你真的需要纳秒,那还是没用。您最好编写自己的包装器:
def format_my_nanos(nanos):
dt = datetime.datetime.fromtimestamp(nanos / 1e9)
return '{}{:03.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S.%f'), nanos % 1e3)
这给了我:
'2013-02-07T17:30:03.083988472'
当然,你也可以做同样的事情,即使Python根本没有达到亚秒精度
def format_my_nanos(nanos):
dt = datetime.datetime.fromtimestamp(nanos / 1e9)
return '{}.{:09.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S'), nanos % 1e9)
@恐怕我不这么认为。这个问题涉及将数字转换为人类可读的字符串,而这个问题正试图从字符串转换为
datetime
对象。@ethg242:这个问题有点像是到处都是,但归结起来是同一件事:datetime
不能处理纳秒,所以你必须自己做数学/stringops。也许有一个关于strtime的问题和另一个关于strftime的问题是可以的。这个问题比duplicate@abarnert你看过另一个问题的答案了吗?哈哈。不知什么原因,纳西是对的,这个问题的答案结果更好,不知道为什么。@victorhooi:是的,有时候DUP确实比原来的好。这意味着您不应该仅仅因为某个问题可能是dup而忽略它(请注意,这里的两个答案中有一个是我的),但这并不意味着我们不应该标记dup。我的问题是,使用1360287003083988472//100000000
,您可能会丢失有价值的信息。通过使用datetime.fromtimestamp(1360287003083988472/100000000)
可以获得人类可读的格式。
'2013-02-07T17:30:03.083988472'
def format_my_nanos(nanos):
dt = datetime.datetime.fromtimestamp(nanos / 1e9)
return '{}.{:09.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S'), nanos % 1e9)