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

数据类型转换的重要性

在任何编程语言中,将一种数据类型转换为另一种数据类型都是至关重要的。几乎所有的编程语言都支持内置数据类型的类型转换。例如,整数可以转换为浮点数,字符串可以转换为布尔值。

对于像日期时间这样的自定义数据类型,则需要额外的模块来进行转换。特别是日期时间转换,对于程序员来说,直接处理这些数据类型往往并不容易。幸运的是,Python提供了内置模块来处理日期和时间,使开发者可以更方便地操作它们。

本文将介绍如何使用不同的Python模块将日期时间字符串转换为日期时间对象。在深入探讨之前,让我们先了解一下为什么需要进行这种转换。

为何需要将日期时间字符串转化为日期时间对象?

当我们需要处理日期时,如果它们是以字符串格式存储的,操作起来会非常不便。将它们转换为日期时间格式后,可以更轻松地进行操作和分析。字符串格式的日期仅仅是普通的文本字符串,不具备任何特殊的日期处理方法。它只有通用的字符串方法,这在处理日期时往往是不够的。

举个例子,假设我们需要比较两个日期的大小。如果它们是字符串格式,我们可能需要进行复杂的字符串比较,并且结果可能不准确。而如果它们是日期时间格式,我们就可以使用标准的比较运算符(例如大于、小于、等于),从而方便快捷地进行比较。

这仅仅是将日期时间字符串转换为日期时间格式的一个好处。在许多其他场景中,例如计算日期之间的差值、进行日期的加减运算、处理时区等,将日期时间字符串转换为日期时间对象可以极大地简化我们的工作,并提升代码的可读性和可维护性。

接下来,我们将介绍将日期时间字符串转换为日期时间对象的不同方法。我们将使用Python内置的datetime模块和第三方库dateutil来完成这个任务。首先,我们从datetime模块开始。

利用 datetime 模块

datetime是Python内置的模块,专门用于处理日期和时间。这个模块包含多个类,可以帮助我们完成各种日期和时间相关的操作。我们将主要使用其中的datetime.datetime类进行日期时间字符串到日期时间对象的转换。

datetime.datetime类有很多方法,其中strptime方法是我们可以用于转换的关键。下面详细介绍strptime方法。

datetime.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方法成功地将日期时间字符串转换为了日期时间对象。请务必确保提供给该方法的格式字符串与日期时间字符串完全匹配。如果不匹配,可能会导致错误或者输出不正确的结果。

在格式化字符串中,我们使用了一些格式化代码,例如%d代表日期,%m代表月份,%Y代表年份等等。你可以参考Python的官方文档查看所有可用的格式代码。

datetime.strptime方法返回完整的日期时间对象。如果我们只想获取日期或时间部分,可以分别使用日期时间对象的date()time()方法。以下代码展示了如何分别获取日期和时间:

  
from datetime import datetime

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

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

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

运行上述代码,你会看到如下输出:

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

date()time()方法分别返回日期对象和时间对象。这些对象也可以进一步进行各种日期和时间的操作。

以上示例都假设我们提供了正确的字符串和格式。如果格式不正确,程序会抛出错误。下面我们来看一下如何处理这些错误。尝试运行以下代码:

  
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'
  
  

同样,我们也可以为接下来要介绍的dateutil.parser.parse方法添加try-except语句,以避免程序在遇到错误时崩溃。虽然这与本教程的主题没有直接关系,但这提醒我们在代码中使用错误处理机制的重要性。

以上就是datetime模块的基本用法。接下来,我们介绍第三方库dateutil

利用 dateutil 模块

dateutil模块是datetime模块的扩展。它提供了许多易于使用的方法,可以更方便地处理日期和时间。可以使用以下命令安装该模块:

  
pip install python-dateutil
  
  

我们主要关注dateutil.parser.parse方法。下面我们来看如何使用它将日期时间字符串转换为日期时间对象。

parser.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方法能够自动识别多种日期时间字符串格式并进行转换,但仍然需要日期时间字符串符合该方法接受的格式,否则会抛出错误。你可以查阅dateutil的文档了解它所支持的所有日期时间字符串格式。

由于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模块可以使日期和时间的处理变得更加简单便捷。你可以在dateutil的文档中深入了解该模块的其他功能。

总结

本文介绍了如何使用Python的内置模块datetime和第三方库dateutil将日期时间字符串转换为datetime对象。此外,Python还有另一个名为time的内置模块,可以实现类似的功能。你可以尝试使用它,方法与datetimedateutil模块类似,并不复杂。

除了上述模块外,可能还有其他库也可以用于实现类似的功能。本文介绍的模块是标准且常用的,你也可以探索其他模块,然后选择最适合你需求的模块。

此外,你还可以学习如何在Python中计算时间差,这将进一步扩展你处理日期和时间的能力。

祝你编程愉快!