Bil*_*ill 42 python time posix
我一直在努力找到一种方法来获取自1970-01-01 00:00:00 UTC以来的时间,以秒为单位,在python中以纳秒为单位,我找不到能给我正确精度的任何东西.
我尝试过使用时间模块,但是精度只有几微秒,所以我尝试的代码是:
import time
print time.time()
Run Code Online (Sandbox Code Playgroud)
这给了我这样的结果:
1267918039.01
Run Code Online (Sandbox Code Playgroud)
但是,我需要一个看起来像这样的结果:
1267918039.331291406
Run Code Online (Sandbox Code Playgroud)
有谁知道以秒和纳秒表达UNIX时间的可能方法?我找不到设置正确精度或以正确格式获得结果的方法.感谢您的任何帮助
Mat*_*ttH 40
由于字符串格式化,您的精度正在丢失:
>>> import time
>>> print "%.20f" % time.time()
1267919090.35663390159606933594
Run Code Online (Sandbox Code Playgroud)
vis*_*ell 15
从Python 3.7开始,它很容易实现time.time_ns()
与
time()
自纪元以来相似但返回时间为整数纳秒.
在Python 3.7版本中包含纳秒的所有新功能: PEP 564:添加具有纳秒分辨率的新时间函数
问题可能与您的操作系统有关,而不是Python.请参阅该time
模块的文档:http://docs.python.org/library/time.html
time.
time()
将时间作为以UTC为单位以秒为单位表示的浮点数返回.请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒.虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值.
换句话说:如果你的操作系统无法做到,那么Python就无法做到.您可以将返回值乘以适当的数量级,以获得纳秒值,尽管可能不精确.
编辑:返回是一个浮点变量,因此逗号后面的位数会有所不同,无论您的操作系统是否具有该精度级别.您可以使用所需位数的"%.nf"
位置对其进行格式化n
,但是,如果您需要固定点字符串表示.
这取决于时钟和你的操作系统和硬件阉的类型或没有,你甚至可以得到纳秒的精度可言。从time
模块文档中:
各种实时函数的精度可能会低于表示其值或自变量的单位所建议的精度。例如,在大多数Unix系统上,时钟每秒仅滴答50或100次。
在Python 3上,该time
模块可让您访问5种不同类型的时钟,每种类型具有不同的属性;其中一些可能会为您提供纳秒级的精确计时。使用该time.get_clock_info()
功能可以查看每个时钟提供的功能以及报告的精确时间。
在我的OS X 10.11笔记本电脑上,可用功能包括:
>>> for name in ('clock', 'monotonic', 'perf_counter', 'process_time', 'time'):
... print(name, time.get_clock_info(name), sep=': ')
...
clock: namespace(adjustable=False, implementation='clock()', monotonic=True, resolution=1e-06)
monotonic: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
perf_counter: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
process_time: namespace(adjustable=False, implementation='getrusage(RUSAGE_SELF)', monotonic=True, resolution=1e-06)
time: namespace(adjustable=True, implementation='gettimeofday()', monotonic=False, resolution=1e-06)
Run Code Online (Sandbox Code Playgroud)
因此,使用time.monotonic()
or time.perf_counter()
函数在理论上将为我提供纳秒级的分辨率。两个时钟都没有给我时间,只有经过的时间。否则,这些值是任意的。但是,它们对于测量花费多长时间很有用。