如何使用 python 解析包含毫秒的时间字符串?
- 2025-02-28 08:22:00
- admin 原创
- 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 "<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
解决方案 1:
Python 2.6 添加了一个新的 strftime/strptime 宏%f
。文档有点误导,因为它们只提到了微秒,但%f
实际上可以解析最多6 位数字的任何秒的十进制分数,这意味着它也适用于毫秒甚至厘秒或十分之一秒。
time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
但是,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
如您所见,.123
被正确解释为123 000
微秒。
解决方案 2:
我知道这是一个老问题,但我仍在使用 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”
解决方案 3:
给出nstehr 的答案所引用的代码(来自其来源):
def timeparse(t, format):
"""Parse a time string that might contain fractions of a second.
Fractional seconds are supported using a fragile, miserable hack.
Given a time string like '02:03:04.234234' and a format string of
'%H:%M:%S', time.strptime() will raise a ValueError with this
message: 'unconverted data remains: .234234'. If %S is in the
format string and the ValueError matches as above, a datetime
object will be created from the part that matches and the
microseconds in the time string.
"""
try:
return datetime.datetime(*time.strptime(t, format)[0:6]).time()
except ValueError, msg:
if "%S" in format:
msg = str(msg)
mat = re.match(r"unconverted data remains:"
" .([0-9]{1,6})$", msg)
if mat is not None:
# fractional seconds are present - this is the style
# used by datetime's isoformat() method
frac = "." + mat.group(1)
t = t[:-len(frac)]
t = datetime.datetime(*time.strptime(t, format)[0:6])
microsecond = int(float(frac)*1e6)
return t.replace(microsecond=microsecond)
else:
mat = re.match(r"unconverted data remains:"
" ,([0-9]{3,3})$", msg)
if mat is not None:
# fractional seconds are present - this is the style
# used by the logging module
frac = "." + mat.group(1)
t = t[:-len(frac)]
t = datetime.datetime(*time.strptime(t, format)[0:6])
microsecond = int(float(frac)*1e6)
return t.replace(microsecond=microsecond)
raise
解决方案 4:
上面的 DNS 答案实际上是不正确的。SO 询问的是毫秒,但答案是微秒。不幸的是,Python 没有针对毫秒的指令,只有微秒(请参阅文档),但您可以通过在字符串末尾附加三个零并将字符串解析为微秒来解决这个问题,例如:
datetime.strptime(time_str + '000', '%d/%m/%y %H:%M:%S.%f')
其中time_str
格式如下30/03/09 16:31:32.123
。
希望这有帮助。
解决方案 5:
我的第一个想法是尝试传递“30/03/09 16:31:32.123”(在秒和毫秒之间用句号代替冒号)。但那行不通。快速浏览文档表明,无论如何都会忽略秒的小数部分...
啊,版本差异。这被报告为一个错误,现在在 2.6+ 中,您可以使用“%S.%f”来解析它。
解决方案 6:
来自 python 邮件列表:解析毫秒线程。那里发布了一个函数,似乎可以完成这项工作,尽管正如作者的评论中提到的那样,它是一种 hack。它使用正则表达式来处理引发的异常,然后进行一些计算。
在将其传递给 strptime 之前,您还可以尝试预先执行正则表达式和计算。
解决方案 7:
对于 python 2 我这样做了
print ( time.strftime("%H:%M:%S", time.localtime(time.time())) + "." + str(time.time()).split(".",1)[1])
它打印时间“%H:%M:%S”,将time.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 道
解决方案 8:
它可以检测格式fromisoformat
,但挑战在于编写格式。
创建自定义格式化程序是我发现的最方便的方法。
from datetime import datetime
import pytz
d = datetime.fromisoformat("2022-08-05 08:47:50.17+00").astimezone(pytz.utc)
print(f"{d.year:04d}-{d.month:02d}-{d.day:02d}T{d.hour:02d}:{d.minute:02d}:{d.second:02d}.{int(d.microsecond/1000):02d}Z")
因此,格式化的值为:2022-08-05T08:47:50.170Z
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)