如何在 Python 中使用 strptime 处理毫秒
处理日期和时间是编程中的常见任务,Python 提供了多个模块来处理此类操作。datetime 模块是用于处理日期和时间的最常用模块之一。它提供了各种函数和类,包括 strptime() 方法,该方法允许我们将日期和时间的字符串表示形式转换为 datetime 对象。在本文中,我们将借助详细示例了解如何在 Python 中使用 strptime 处理毫秒。
了解 strptime()
datetime 模块中的 strptime() 方法用于将日期和时间的字符串表示形式解析为 datetime 对象。它需要两个参数:第一个参数是要解析的字符串,第二个参数是指定输入字符串预期格式的格式字符串。格式字符串由表示日期和时间不同部分的格式代码组成。
默认情况下,strptime() 方法不支持解析毫秒。毫秒的可用格式代码有限,并且它们与微秒通常使用的 %f 格式代码不对应。但是,我们可以通过结合使用字符串切片和整数转换来克服这一限制。
使用带有毫秒的 strptime:
要使用带有毫秒的 strptime(),我们需要遵循两个步骤:
使用 strptime() 解析不带毫秒的字符串。
单独提取毫秒并将其添加到解析的 datetime 对象中。
算法
导入 datetime 模块。
定义表示带有毫秒的日期和时间的输入字符串。
定义不带毫秒的格式字符串。
解析不带毫秒的字符串使用 strptime() 从输入字符串中排除最后四个字符(毫秒),以毫秒为单位解析日期时间对象。
从输入字符串中单独提取毫秒。
将解析后的 datetime 对象中的微秒乘以 1000,用提取的毫秒替换微秒。
打印或使用解析后的带有毫秒的 datetime 对象。
示例 1:解析带有毫秒的日期和时间字符串
假设我们有一个格式为"2023-05-29 12:34:56.789"的日期和时间字符串,我们想将其解析为带有毫秒的 datetime 对象。我们将在下面的例子中实现这一点。
在下面的例子中,我们首先使用 strptime() 解析不带毫秒的字符串,方法是从输入字符串中排除最后四个字符(毫秒)。然后,我们从输入字符串中单独提取毫秒,并将它们乘以 1000 以将其转换为微秒。最后,我们用提取的毫秒替换解析后的 datetime 对象中的微秒。
from datetime import datetime input_string = '2023-05-29 12:34:56.789' format_string = '%Y-%m-%d %H:%M:%S' # 步骤 1:解析不带毫秒的字符串 parsed_datetime = datetime.strptime(input_string[:-4], format_string) # 步骤 2:单独提取毫秒并将其添加到解析的 datetime 对象中 milliseconds = int(input_string[-3:]) parsed_datetime = parsed_datetime.replace(microsecond=milliseconds * 1000) print(parsed_datetime)
输出
2023-05-29 12:34:56.789000
示例 2:解析带毫秒的时间字符串
让我们考虑一个场景,其中我们有一个格式为"12:34:56.789"的时间字符串,我们希望将其解析为带有毫秒的 datetime 对象。我们将在下面的示例中实现这一点。
在下面的示例中,我们遵循与之前相同的两步流程。我们使用 strptime() 解析不带毫秒的字符串,方法是从输入字符串中排除最后四个字符(毫秒)。然后,我们单独提取毫秒并将其添加到解析后的 datetime 对象中。
from datetime import datetime input_string = '12:34:56.789' format_string = '%H:%M:%S' # 步骤 1:解析不带毫秒的字符串 parsed_datetime = datetime.strptime(input_string[:-4], format_string) # 步骤 2:单独提取毫秒并将其添加到解析后的 datetime 对象中 milliseconds = int(input_string[-3:]) parsed_datetime = parsed_datetime.replace(microsecond=milliseconds * 1000) print(parsed_datetime)
输出
1900-01-01 12:34:56.789000
结论
在本文中,我们讨论了如何在 Python 中使用 strptime 来表示毫秒。虽然 strptime 本身不支持毫秒,但我们可以通过使用字符串切片和整数转换来克服这一限制。通过遵循两步过程,即解析不带毫秒的字符串,然后分别提取和添加毫秒,我们可以实现对带毫秒的日期和时间字符串的准确解析。