Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python解析包含毫秒的时间字符串?_Python_Date_Time_Datetime Parsing - Fatal编程技术网

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

如何使用python解析包含毫秒的时间字符串?,python,date,time,datetime-parsing,Python,Date,Time,Datetime Parsing,我能够用time.strtime分析包含日期/时间的字符串 >>> 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')

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

>>> 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 "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
    data_string[found.end():])
ValueError: unconverted data remains: .123
>>time.strtime('30/03/09 16:31:32.123','%d/%m/%y%H:%m:%S')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.5/_strtime.py”,strtime中的第333行
数据_字符串[found.end():])
ValueError:未转换的数据仍然存在:.123

我的第一个想法是尝试传递它“30/03/09 16:31:32.123”(在秒和毫秒之间用句点代替冒号),但这不起作用。快速浏览文档表明,分数秒在任何情况下都会被忽略


啊,版本差异。在2.6+中,您可以使用“%S.%f”对其进行解析。

我的第一个想法是尝试将其传递为“30/03/09 16:31:32.123”(在秒和毫秒之间用句点代替冒号)。但这不起作用。快速浏览文档表明,分数秒在任何情况下都会被忽略


啊,版本差异。在2.6+中,您可以使用“%S.%f”来解析它。

来自python邮件列表:。那里有一个函数似乎可以完成这项工作,尽管正如作者在评论中提到的,这是一种黑客行为。它使用正则表达式来处理引发的异常,然后进行一些计算


在将正则表达式传递给strtime之前,您还可以尝试预先执行正则表达式和计算。

来自python邮件列表:。那里有一个函数似乎可以完成这项工作,尽管正如作者在评论中提到的,这是一种黑客行为。它使用正则表达式来处理引发的异常,然后进行一些计算

在将正则表达式传递给strtime之前,您还可以尝试预先执行正则表达式和计算。

以给出引用(from)的代码:

要给出引用(来自)的代码,请执行以下操作:


Python 2.6添加了一个新的strftime/strptime宏
%f
。这些文档有点误导人,因为它们只提到微秒,但是
%f
实际解析的是秒的任何小数部分,最多有6位数字,这意味着它也适用于毫秒甚至厘米秒或分秒

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
但是,实际上并不存储毫秒/微秒。您最好使用
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

如您所见,
.123
被正确解释为
123000
微秒。

Python 2.6添加了一个新的strftime/strptime宏
%f
。这些文档有点误导人,因为它们只提到微秒,但是
%f
实际解析的是秒的任何小数部分,最多有6位数字,这意味着它也适用于毫秒甚至厘米秒或分秒

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
但是,实际上并不存储毫秒/微秒。您最好使用
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

如您所见,
.123
被正确解释为
123000
微秒。

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

如果datetime不支持%f且不需要尝试/例外,则解决方案是:

    (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”

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

如果datetime不支持%f且不需要尝试/例外,则解决方案是:

    (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 

这适用于python 2的输入字符串“2010-10-06 09:42:52.266000”

,我这样做了

print ( time.strftime("%H:%M:%S", time.localtime(time.time())) + "." + str(time.time()).split(".",1)[1])
它打印时间“%H:%M:%S”,将时间.time()拆分为两个子字符串(在.xxxxxxx.xx之前和之后),并且因为.xx是我的毫秒,我将第二个子字符串添加到我的“%H:%M:%S”

希望这是有道理的:) 示例输出:

13:31:21.72 眨眼01


13:31:21.81 眨眼01结束


13:31:26.3 眨眼01


13:31:26.39 眨眼01结束


13:31:34.65 起始车道01



对于python 2,我这样做了

print ( time.strftime("%H:%M:%S", time.localtime(time.time())) + "." + str(time.time()).split(".",1)[1])
它打印时间“%H:%M:%S”,将时间.time()拆分为两个子字符串(在.xxxxxxx.xx之前和之后),并且因为.xx是我的毫秒,我将第二个子字符串添加到我的“%H:%M:%S”

希望这是有道理的:) 示例输出:

13:31:21.72 眨眼01


13:31:21.81 眨眼01结束


13:31:26.3 眨眼01


13:31:26.39 眨眼01结束


13:31:34.65 起始车道01


实际上是不正确的。SO询问的是毫秒,但答案是微秒。不幸的是,Python没有毫秒指令,只有微秒指令(请参阅),但您可以通过在字符串末尾添加三个零并以微秒形式解析字符串来解决此问题,例如:

datetime.strptime(time_str + '000', '%d/%m/%y %H:%M:%S.%f')
其中
time\u str
的格式类似于
30/03/09 16:31:32.123

希望这有帮助。

实际上是不正确的。SO询问的是毫秒,但答案是微秒。不幸的是,Python没有毫秒指令,只有微秒指令(请参阅),但您可以通过在字符串末尾添加三个零并以微秒形式解析字符串来解决此问题,例如:

datetime.strptime(time_str + '000', '%d/%m/%y %H:%M:%S.%f')
其中
time\u str
的格式类似于
30/03/09 16:31:32.123


希望这能有所帮助。

那不行;time.strtime不能用毫秒,那不行;time.strtime不能用毫秒。是的,我知道那个线程。但我正在寻找一种更简单的方法。在standart python库中是否有任何模块以毫秒为单位进行时间解析?是的,我知道该线程。但我正在寻找一种更简单的方法。standart python库中是否有任何模块可以以毫秒为单位进行时间解析?谢谢:新增