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

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

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

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

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

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

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

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

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

使用日期时间

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

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

日期时间.strptime

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))

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

2022-12-19 21:37:56

我们获取了一个日期时间字符串,并使用 datetime.strptime 方法将其转换为日期时间对象。 确保您提供给该方法的格式与日期时间字符串完全匹配。 如果它们不匹配,那么您可能会收到错误或不正确的输出。

我们为日期时间格式使用了一些格式化代码。 您可以参考文档中的所有格式代码。

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

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

日期和时间方法将分别返回它们的对象。 他们将再次拥有各自的日期和时间方法。

  WebSphere Application Server 8.5.5 ND 安装指南

我们已经为上面看到的 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))

上面的代码将抛出错误,因为格式与日期时间字符串不匹配。 为了处理这些类型的错误,我们可以使用 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。 让我们看看如何将日期时间字符串转换为日期时间对象。

解析器.parse

parser.parse 方法将采用日期时间字符串并将其转换为相应的日期时间对象格式。 我们不需要为此方法提供任何格式。 它会自动将给定的日期时间字符串转换为日期时间对象。 让我们看一个例子。

from dateutil import parser

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

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

2022-12-19 21:37:56

日期时间字符串必须采用 parser.parse 方法接受的特定格式。 如果日期时间字符串格式不符合其所需格式,它将抛出错误。 您可以检查它接受自动转换的所有日期时间字符串格式。

  (已修复)您的 PC 出现问题并需要重新启动

由于 parser.parse 方法返回 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 对象。 还有另一个名为 time 的内置模块,我们可以将 datetime 字符串转换为 DateTime 对象,类似于 datetime 和 dateutil 模块。 自己试试吧。 这并不难,因为您已经对其他模块做过类似的事情。

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

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

快乐编码🙂