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

已发表: 2022-12-20

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

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

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

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

当我们必须处理日期时,如果它们是字符串格式则不容易处理。 将它们转换为日期时间格式使得使用它们变得非常容易。 字符串中的日期类似于普通字符串。 它不会有任何特殊的方法来处理日期。 它将具有通用的字符串方法,我们在处理日期时不需要这些方法。

假设我们必须比较两个日期。 如果它们是字符串格式,我们可以正确地比较它们。 如果它们是datetime时间格式,我们可以使用数字之类的比较运算符。

这只是转换为datetime时间格式使事情变得简单的一种情况。 在很多情况下,例如添加日期、减去日期、处理时区等,将datetime时间字符串转换为datetime时间对象使我们的生活比以往任何时候都更加轻松。

话虽如此,让我们看看将datetime时间字符串转换为datetime时间对象的不同方法。 我们将使用内置的datetime和第三方dateutil模块将datetime字符串转换为datetime对象。 让我们从日期时间模块开始

使用日期时间

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

datetime.datetime有很多方法。 我们对strptime方法感兴趣,它可以帮助我们进行转换。 让我们检查一下。

日期时间.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时间格式使用了一些格式化代码。 您可以参考文档中的所有格式代码。

datetime.strptime方法返回完整的datetime 。 如果要分别获取日期和时间,我们可以使用datetime对象的日期time方法。 让我们看看代码。

 from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())

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

 Date: 2022-12-19 Time: 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。 它帮助我们避免在中间破坏代码。 这与本教程上下文没有特别相关,但它会提醒您在代码中使用它。

这就是datetime模块。 让我们转到下一个模块dateutil

使用日期实用程序

模块dateutil提供了对datetime模块的扩展。 通过许多易于使用的方法,它使处理日期和时间变得更加容易。 让我们使用以下命令安装模块。

 pip install python-dateutil

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

解析器.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("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())

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

 Date: 2022-12-19 Time: 21:37:56

正如您所看到的, dateutil使处理日期和时间变得相对容易。 您可以在文档中探索该模块。

结论

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

可能有更多的库可以用来实现同样的事情。 我们在 Thing 教程中使用的模块是标准的并且被广泛使用。 您可以探索更多关于其他模块的信息,然后选择最适合您的模块。

您还可以探索如何在 python 中计算时差。

快乐编码