如何在Python中将字符串转换为日期时间

在任何编程语言中,将一种类型的数据转换为另一种类型的数据都是至关重要的。几乎所有的编程语言都支持内置数据类型的类型转换。

像日期时间这样的自定义数据类型需要额外的模块进行转换。我们需要模块,特别是对于datetime转换,因为对程序员来说,处理它们从来都不是容易的。幸运的是,Python有内置的模块来处理日期时间。

我们将学习如何使用不同的modulesdatetime字符串转换为Python中的datetime对象。在开始之前,让我们看看为什么我们需要首先进行转换。

为什么我们需要将日期时间字符串转换为日期时间对象?

当我们需要处理日期时,如果它们是以字符串格式存在,那么工作起来并不容易。将其转换为日期时间格式可以使我们很容易地处理它们。字符串中的日期就像普通字符串一样。它没有任何处理日期的特殊方法。它只有通用的字符串方法,而我们在处理日期时不需要使用这些方法。

假设我们需要比较两个日期。如果它们是以字符串格式存在,我们可以正确地比较它们。如果它们是以datetime格式存在,我们可以像比较数字一样使用比较运算符。

这只是转换为datetime格式使事情变得容易的一种场景。还有很多其他场景,例如添加日期、减去日期、处理时区等,将datetime字符串转换为datetime对象比以往更容易地使我们的生活变得更加轻松。

说完了,让我们看看不同的方法将datetime字符串转换为datetime对象。我们将使用内置的datetime和第三方的dateutil模块将datetime字符串转换为datetime对象。让我们从datetime模块开始。

使用datetime

datetime是Python的内置模块,用于处理日期和时间。这个模块中有很多类可以帮助我们处理日期和时间。我们将使用datetime.datetime类进行转换。

datetime.datetime有很多方法。我们对strptime方法感兴趣,它将帮助我们进行转换。让我们来看看它。

datetime.strptime

datetime.strptime方法用于将datetime字符串转换为datetime对象。它接受两个字符串,一个是datetime字符串,另一个是该datetime字符串的格式。然后它返回datetime对象。

让我们看一个例子

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

如果你运行上面的代码,你将看到以下输出。

2022-12-19 21:37:56

我们已经取得了一个datetime字符串,并使用datetime.strptime方法将其转换为datetime对象。确保你提供给方法的格式与datetime字符串完全匹配。如果不匹配,可能会导致错误或不正确的输出。

我们为datetime格式使用了一些格式化代码。你可以参考所有的format codes in the docs

datetime.strptime方法返回完整的datetime。如果你想要单独获取日期和时间,可以使用datetime对象的日期时间方法。让我们看一下代码。

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"

## 获取日期
print("日期:", datetime.strptime(string, formatting).date())

## 获取时间
print("时间:", datetime.strptime(string, formatting).time())

运行上述代码,你将看到以下输出。

日期: 2022-12-19
时间: 21:37:56

datetime方法分别返回日期和时间对象。它们又有各自的日期和时间方法。

我们已经为datetime.strptime方法提供了正确的字符串和格式,如果我们没有正确提供它们,将会出现错误。让我们看看如何处理这些错误。运行以下代码。

from datetime import datetime

string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

上述代码会抛出一个错误,因为格式不匹配datetime字符串。为了处理这类错误,我们可以使用Python的try-except语句。让我们加上它。

from datetime import datetime

try:
    string = "19:12:2022 09:37:56 PM"
    formatting = "%d-%m-%Y %I:%M:%S %p"
    print(datetime.strptime(string, formatting))
except ValueError as error:
    print(error)

现在,再次运行代码。你将会看到以下错误消息,但不会中断代码的执行。

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

同样地,我们也可以为接下来的parser.parse方法添加try-except语句。它可以帮助我们避免代码中断。这与本教程的特定上下文没有直接关系,但它会提醒你在你的代码中使用try-except语句。

这就是关于datetime模块的内容。让我们继续下一个模块dateutil

使用dateutil

dateutil模块提供了对datetime模块的扩展。它通过提供许多简单易用的方法,大大简化了处理日期和时间的操作。让我们使用以下命令安装该模块。

pip install python-dateutil

我们感兴趣的方法是dateutil.parser.parse。让我们看看如何将datetime字符串转换为datetime对象。

parser.parse

parser.parse方法接受一个datetime字符串,并将其转换为相应的datetime对象格式。我们不需要为该方法提供任何格式。它会自动将给定的datetime字符串转换为datetime对象。让我们看一个例子。

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

如果你运行上述代码,你将会看到以下输出。

2022-12-19 21:37:56

datetime字符串必须按照parser.parse方法所要求的特定格式。如果datetime字符串格式不正确,它将抛出一个错误。你可以在此链接中找到它所接受的格式。

由于parser.parse方法返回datetime对象,我们可以像datetime模块一样分别访问datetime对象。让我们看看代码。

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("日期:", parser.parse(string).date())
print("时间:", parser.parse(string).time())

如果你运行上面的代码,你将看到下面的输出。

日期:2022-12-19
时间:21:37:56

正如你所见,dateutil相对于日期和时间的处理更加简单。你可以在 docs中探索这个模块。

结论

我们使用了一个内置模块和一个第三方模块将 datetime 字符串转换为 DateTime 对象。还有另一个内置模块叫做 time,我们可以使用它将 datetime 字符串转换为类似于 datetimedateutil 模块的 DateTime 对象。尝试一下吧,这并不难,因为你已经在其他模块中做过类似的事情。

可能还有更多的库可以实现同样的功能。我们在本教程中使用的模块是标准的和广泛使用的。你可以进一步了解其他模块,并选择最适合你的一个。

你还可以探索如何在 python 中 calculate time difference

快乐编程 🙂

类似文章