如何在Python中将字符串转换为日期时间
在任何编程语言中,将一种类型的数据转换为另一种类型的数据都是至关重要的。几乎所有的编程语言都支持内置数据类型的类型转换。
像日期时间这样的自定义数据类型需要额外的模块进行转换。我们需要模块,特别是对于datetime
转换,因为对程序员来说,处理它们从来都不是容易的。幸运的是,Python有内置的模块来处理日期时间。
我们将学习如何使用不同的modules将datetime
字符串转换为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
date
和time
方法分别返回日期和时间对象。它们又有各自的日期和时间方法。
我们已经为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
模块一样分别访问date
和time
对象。让我们看看代码。
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
字符串转换为类似于 datetime
和 dateutil
模块的 DateTime 对象。尝试一下吧,这并不难,因为你已经在其他模块中做过类似的事情。
可能还有更多的库可以实现同样的功能。我们在本教程中使用的模块是标准的和广泛使用的。你可以进一步了解其他模块,并选择最适合你的一个。
你还可以探索如何在 python 中 calculate time difference。
快乐编程 🙂