添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
好帅的小熊猫  ·  Spring ...·  11 月前    · 
憨厚的小马驹  ·  Qt 4.8: QDateTime ...·  1 年前    · 
不拘小节的荒野  ·  Authentication/login-f ...·  1 年前    · 

在Python中使用%f和strftime()来获得微秒数

142 人关注

我试图使用strftime()达到微秒级的精度,使用%f似乎是可行的(如所述 here ). However when I try the following code:

import time
import strftime from time
print strftime("%H:%M:%S.%f")

...我得到了小时、分钟和秒,但是%f打印成%f,没有微秒的迹象。我在Ubuntu上运行Python 2.6.5,所以应该没问题,%f应该被支持(据我所知,2.6及以上版本都支持。)

python
time
strftime
oakbramble
oakbramble
发布于 2011-07-13
8 个回答
adamnfish
adamnfish
发布于 2019-08-07
已采纳
0 人赞同

你可以使用datetime的strftime函数来获得这个信息。问题是,time的strftime接受的是一个不带有微秒信息的时间元组。

from datetime import datetime
datetime.now().strftime("%H:%M:%S.%f")

Should do the trick!

如果你想使用 %z ,就不会。
@Vallentin 很确定是相反的! datetime supports the %z directive while 时间似乎并不 .
Both support %z in Python 3 :-) 这里是日期时间 然后 time
哦,你是对的。我错过了日期时间,因为它不在底部,就像时间表上的一样。
注意 from datetime import datetime 。 如果你只做 import datetime ,你将不得不使用 datetime.datetime.now().strftime("%H:%M:%S.%f")
Jochen Ritzel
Jochen Ritzel
发布于 2019-08-07
0 人赞同

你看到的是错误的文档。替换代码0】模块 有不同的文件 .

你可以使用 datetime 模块 strftime like this:

>>> from datetime import datetime
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'
    
下面是日期时间模块的文档链接。 docs.python.org/2/library/...
谢谢你的帖子。为什么有一个日期时间和时间模块?
baltasvejas
baltasvejas
发布于 2019-08-07
0 人赞同

使用Python的 time 模块,你不能用 %f 获得微秒。

对于那些仍然想只使用 time 模块的人,这里有一个变通办法。

now = time.time()
mlsec = repr(now).split('.')[1][:3]
print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now))

You should get something like 2017-01-16 16:42:34.625 EET(是的,我使用毫秒,因为它相当足够)。

要将代码分解成细节,请将下面的代码粘贴到Python控制台。

import time
# Get current timestamp
now = time.time()
# Debug now
print now
type(now)
# Debug strf time
struct_now = time.localtime(now)
print struct_now
type(struct_now)
# Print nicely formatted date
print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
# Get miliseconds
mlsec = repr(now).split('.')[1][:3]
print mlsec
# Get your required timestamp string
timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
print timestamp

为了说明问题,我也把我的Python 2.7.12结果粘贴在这里。

>>> import time
>>> # get current timestamp
... now = time.time()
>>> # debug now
... now
1484578293.519106
>>> print now
1484578293.52
>>> type(now)
<type 'float'>
>>> # debug strf time
... struct_now = time.localtime(now)
>>> print struct_now
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=16, tm_hour=16, tm_min=51, tm_sec=33, tm_wday=0, tm_yday=16, tm_isdst=0)
>>> type(struct_now)
<type 'time.struct_time'>
>>> # print nicely formatted date
... print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
2017-01-16 16:51:33 EET
>>> # get miliseconds
... mlsec = repr(now).split('.')[1][:3]
>>> print mlsec
>>> # get your required timestamp string
... timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
>>> print timestamp
2017-01-16 16:51:33.519 EET
    
salah Laaroussi
salah Laaroussi
发布于 2019-08-07
0 人赞同

This should do the work

import datetime
datetime.datetime.now().strftime("%H:%M:%S.%f")

It will print

HH:MM:SS.microseconds like this e.g 14:38:19.425961

Pushpak Dagade
Pushpak Dagade
发布于 2019-08-07
0 人赞同

你也可以通过 time 模块的 time() 功能获得微秒级精度。
( time.time() 返回自纪元以来以秒为单位的时间。它的小数部分是以微秒为单位的时间,这是你想要的)。

>>> from time import time
>>> time()
... 1310554308.287459   # the fractional part is what you want.
# comparision with strftime -
>>> from datetime import datetime
>>> from time import time
>>> datetime.now().strftime("%f"), time()
... ('287389', 1310554310.287459)
    
很好。谢谢你的帮助。我已经设法让事情运转起来了,不过发现了一个奇怪的错误,即当我以sudo身份在某个特定的cset上运行脚本时,不会出现微秒,但如果我在试图在某个特定的cset上运行之前以sudo身份登录,就会出现微秒。奇怪了。
user2189872
user2189872
发布于 2019-08-07
0 人赞同

当微秒的"%f "不工作时,请使用以下方法。

import datetime
def getTimeStamp():
    dt = datetime.datetime.now()
    return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)
    
M456
如果dt.microsecond的数字少于6位,这将无法工作。
这是对我来说唯一有效的解决方案。 在Windows的Jython中,%f似乎总是打印一个字面的%f。 我想要的是毫秒,所以用str(dt.microsecond)[0:3] 。
str(dt.microsecond)[0:3]可能会产生一个错误的结果(例如,300微秒是0.300毫秒,但它会打印300!)。
"%03d"%int(dt.microsecond/1000) -> this prints the millseconds and not microseconds
Rafal Enden
Rafal Enden
发布于 2019-08-07
0 人赞同

如果你想要一个整数,可以试试这个代码。

import datetime
print(datetime.datetime.now().strftime("%s%f")[:13])

Output:

1545474382803
    
mato
mato
发布于 2019-08-07
0 人赞同

如果你想要速度,可以试试这个。

def _timestamp(prec=0):
    t = time.time()
    s = time.strftime("%H:%M:%S", time.localtime(t))
    if prec > 0:
        s += ("%.9f" % (t % 1,))[1:2+prec]