当前位置:  开发笔记 > 编程语言 > 正文

如何用python解析包含毫秒的时间字符串?

如何解决《如何用python解析包含毫秒的时间字符串?》经验,为你挑选了2个好方法。

我能够用time.strptime解析包含日期/时间的字符串

>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)

如何解析包含毫秒的时间字符串?

>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
    data_string[found.end():])
ValueError: unconverted data remains: .123

DNS.. 296

Python 2.6添加了一个新的strftime/strptime宏%f,它执行微秒.不确定是否记录在任何地方.但是如果你使用2.6或3.0,你可以这样做:

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')

编辑:我从来没有真正使用过该time模块,所以我一开始并没有注意到这一点,但似乎time.struct_time实际上并没有存储毫秒/微秒.你可能会更好用datetime,比如:

>>> from datetime import datetime
>>> a = datetime.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
>>> a.microsecond
123000

它只是我还是关于毫秒而不是微秒的问题? (14认同)

从2.7.3版开始,Python文档有点误导.对于strptime,%f实际上可以表示任意数量的小数位,而不仅仅是6,正如人们可能期望的微秒.所以上面的代码将解析32.123秒并将其存储为123,000μs,这正是我们想要的. (13认同)

'%f`中的数字在*右*(不是左边!)上用0填充到小数点后6位.1被解析为100000,12被解析为120000,而1234567产生`ValueError:未转换的数据仍为:7 (8认同)

Woa我可以告诉Python文档需要更新.[时间模块的文档](http://docs.python.org/library/time.html#time.strftime)没有说'%f`. (5认同)

感谢http://docs.python.org/library/datetime.html:2.6版中的新功能:time和datetime对象支持%f格式代码,该代码扩展为对象中的微秒数,左侧为零填充六个地方. (4认同)

@MichaelScheper:"任意数量的小数位",只要小于7;)即`.%f`适用于`.1`,`.12`,`.123`,`.1234`,` .12345`,`.123456`但它停止为`.1234567`工作. (2认同)

@Purrell:这只是你.我的观点是`%f`适用于像'23 .123'这样的字符串.(对不起,我没有解释123,000μs= 123ms;有时我忘记了几个国家仍然没有采用SI单位,因此不太熟悉标准的指数前缀.) (2认同)


Andrew Stern.. 12

我知道这是一个较旧的问题,但我仍在使用Python 2.4.3,我需要找到一种更好的方法将数据字符串转换为日期时间.

解决方案如果datetime不支持%f并且不需要try/except,那么:

    (dt, mSecs) = row[5].strip().split(".") 
    dt = datetime.datetime(*time.strptime(dt, "%Y-%m-%d %H:%M:%S")[0:6])
    mSeconds = datetime.timedelta(microseconds = int(mSecs))
    fullDateTime = dt + mSeconds 

这适用于输入字符串"2010-10-06 09:42:52.266000"



1> DNS..:

Python 2.6添加了一个新的strftime/strptime宏%f,它执行微秒.不确定是否记录在任何地方.但是如果你使用2.6或3.0,你可以这样做:

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')

编辑:我从来没有真正使用过该time模块,所以我一开始并没有注意到这一点,但似乎time.struct_time实际上并没有存储毫秒/微秒.你可能会更好用datetime,比如:

>>> from datetime import datetime
>>> a = datetime.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
>>> a.microsecond
123000


它只是我还是关于毫秒而不是微秒的问题?
从2.7.3版开始,Python文档有点误导.对于strptime,%f实际上可以表示任意数量的小数位,而不仅仅是6,正如人们可能期望的微秒.所以上面的代码将解析32.123秒并将其存储为123,000μs,这正是我们想要的.
'%f`中的数字在*右*(不是左边!)上用0填充到小数点后6位.1被解析为100000,12被解析为120000,而1234567产生`ValueError:未转换的数据仍为:7
Woa我可以告诉Python文档需要更新.[时间模块的文档](http://docs.python.org/library/time.html#time.strftime)没有说'%f`.
感谢http://docs.python.org/library/datetime.html:2.6版中的新功能:time和datetime对象支持%f格式代码,该代码扩展为对象中的微秒数,左侧为零填充六个地方.
@MichaelScheper:"任意数量的小数位",只要小于7;)即`.%f`适用于`.1`,`.12`,`.123`,`.1234`,` .12345`,`.123456`但它停止为`.1234567`工作.
@Purrell:这只是你.我的观点是`%f`适用于像'23 .123'这样的字符串.(对不起,我没有解释123,000μs= 123ms;有时我忘记了几个国家仍然没有采用SI单位,因此不太熟悉标准的指数前缀.)

2> Andrew Stern..:

我知道这是一个较旧的问题,但我仍在使用Python 2.4.3,我需要找到一种更好的方法将数据字符串转换为日期时间.

解决方案如果datetime不支持%f并且不需要try/except,那么:

    (dt, mSecs) = row[5].strip().split(".") 
    dt = datetime.datetime(*time.strptime(dt, "%Y-%m-%d %H:%M:%S")[0:6])
    mSeconds = datetime.timedelta(microseconds = int(mSecs))
    fullDateTime = dt + mSeconds 

这适用于输入字符串"2010-10-06 09:42:52.266000"

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有