Using %f with strftime() in Python to get microseconds
我正在尝试使用strftime()达到微秒级的精度,这似乎可以使用%f(如此处所述)进行。 但是,当我尝试以下代码时:
1 2 3 4 | import time import strftime from time print strftime("%H:%M:%S.%f") |
...我得到小时,分钟和秒,但%f打印为%f,没有微秒的迹象。 我在Ubuntu上运行Python 2.6.5,所以应该没问题,应该支持%f(据我所知,它在2.6及更高版本中受支持。)
您可以使用datetime的strftime函数来获取此信息。问题在于时间的strftime接受不携带微秒信息的时间元组。
1 2 | from datetime import datetime datetime.now().strftime("%H:%M:%S.%f") |
应该做的把戏!
您正在查看错误的文档。
您可以像这样使用
1 2 3 4 5 | >>> from datetime import datetime >>> >>> now = datetime.now() >>> now.strftime("%H:%M:%S.%f") '12:19:40.948000' |
这应该做的工作
1 2 | import datetime datetime.datetime.now().strftime("%H:%M:%S.%f") |
它将打印
您还可以使用
(
1 2 3 4 5 6 7 8 9 10 | >>> 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) |
使用Python的
对于仍然只想使用
1 2 3 | now = time.time() mlsec = repr(now).split('.')[1][:3] print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now)) |
您应该会得到类似2017-01-16 16:42:34.625 EET的信息(是的,我使用毫秒,因为这已经足够了)。
要将代码分解为细节,请将以下代码粘贴到Python控制台中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import time # Get current timestamp now = time.time() # Debug now 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结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | >>> 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 519 >>> # 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 >>> |
如果微秒的"%f"不起作用,请使用以下方法:
1 2 3 4 5 | import datetime def getTimeStamp(): dt = datetime.datetime.now() return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond) |
如果要提高速度,请尝试以下操作:
1 2 3 4 5 6 | 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] return s |
其中
请注意,该函数与小数部分中的前导零没有问题,就像此处介绍的一些其他解决方案一样。
如果需要整数,请尝试以下代码:
1 2 | import datetime print(datetime.datetime.now().strftime("%s%f")[:13]) |
输出:
1 | 1545474382803 |