在 Python 中解析 ISO 8601 日期
日期对每个人都很重要,对我们使用的许多应用程序也至关重要。 作为一名开发人员,可能会对存在的不同时区或时间对象以及围绕它们工作感到困惑。
然而,通常存在使工作更容易的标准,这就是本文所需要的。 此外,我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime。
ISO 8601 日期的结构
ISO(国际标准化组织)致力于为其成员国在不同领域创建标准化,这些领域通常包括技术和非技术领域。 工程等领域是他们优先考虑的部分。
众多标准化包括 ISO 8601 日期时间,以月、日、小时、分钟、秒和毫秒表示。 它在全球范围内用作任何数据的日期时间标准,并且是基于时间的,有助于防止误传和错误。
如果您要构建一个在全球范围内使用的 Python 应用程序,了解 ISO 8601 DateTime 对象很重要,解析它可能是一项要求。
ISO 8601 日期时间用从左边开始的年份表示,以毫秒参数结束,并且通常与从 T 到 Z 的其他计算机字符结合使用。
2022-08-10 17:00:00.000
上面的 ISO DateTime 对象代表 2022 年 8 月 11 日下午 5 点。 在当地时区内。
重要的是声明 ISO 8601 DateTime 字符串需要日期部分,但时间部分是可选的。 它们是 ISO 8601 的不同变体,但以上将是本文的参考。
使用 strptime() 和 strtime() 在 Python 中解析 ISO 8601 日期
Python 预装了对不同操作有用的不同模块,其中一个预装模块是 datetime,它有助于日期和时间操作。 使用 datetime 模块,您可以获得 datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
值。
now()
方法帮助我们获取和开发当前日期和时间,并提供典型的 DateTime 对象,我们可以操作或解析该对象以获取我们需要的任何信息。
from datetime import datetime
todaysDate = datetime.now()
print(todaysDate)
输出:
2022-09-28 06:55:56.832983
此外,today()
方法可用于实现相同的值。 虽然,now()
方法优于 today()
方法。
AnoTodaysDate = datetime.today()
输出:
2022-09-29 10:48:43.311880
之前,我们将典型的 Python DateTime 对象解析为标准化的 ISO 6801 DateTime。 让我们通过使用 Python DateTime 对象创建 ISO 6801 DateTime 来扭转这一局面。
为此,我们需要 strftime()
方法,它可以帮助我们将 DateTime 对象转换为其字符串表示形式——这次是 ISO 6801 DateTime 字符串。
from datetime import datetime
todaysDate = datetime.now()
todaysDateInISO = todaysDate.strftime('%Y-%m-%dT%H:%M:%S.%f%z')
print(todaysDateInISO)
输出:
2022-09-29T11:08:29.413183
todaysDate 绑定保存当前日期和时间的 Python DateTime 对象,然后我们将绑定作为参数传递给 strftime() 方法以创建等效的 ISO 8601 DateTime 字符串。
有了这些,我们如何将 ISO 8601 DateTime 字符串转换为 Python DateTime 对象? 我们需要一个与 strftime() 方法相反的方法,即 strptime()。
此方法从 DateTime 字符串创建 DateTime 对象。
因此,我们将传递一个 ISO 6801 DateTime 字符串作为 strptime() 的第一个参数和另一个定义所需日期格式的参数 - Python DateTime 对象 %Y-%m-%dT%H:%M:%SZ
.
parsedDate = datetime.strptime("2022-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")
print(parsedDate)
输出:
2022-03-04 21:08:12
Y-%m-%dT%H:%M:%SZ
日期格式使用 Python DateTime 对象中指定的格式代码处理年、月、日、小时、分钟和秒。
使用 fromisoformat() 在 Python 中解析 ISO 8601 日期
类似于 strftime()
和 strptime()
方法,有专门的方法可以创建 ISO 6801 DateTime 字符串或将它们转换为 Python DateTime 对象。 isoformat() 方法有助于返回根据 ISO 格式化的时间,该时间以 YYYY-MM-DD HH:MM:SS.mmmmmm 格式处理。
更重要的是,fromisoformat()
方法采用 ISO 8601 DateTime 字符串并返回等效的 Python DateTime 对象。
要从 Python DateTime 对象创建 ISO 8601,您可以先使用 now()
方法创建 DateTime 对象,然后使用 isoformat()
获取结果的 ISO 8601 属性(格式)。
from datetime import datetime
todaysDate = datetime.now()
todaysDateInISO = todaysDate.isoformat()
print(todaysDateInISO)
输出:
2022-09-28T07:46:13.350585
结果通常包含日期和时间之间的分隔符。 在这里,它是 T 并且可以更改。 您可以通过传递参数来更改分隔符。
todaysDateInISO = todaysDate.isoformat("$")
print(todaysDateInISO)
输出:
2022-09-28$07:48:11.060212
现在是问题的关键,我们可以将 ISO 8601 DateTime 字符串解析为典型的 Python DateTime 对象。
parsedDate = datetime.fromisoformat(todaysDateInISO)
print(parsedDate)
输出:
2022-09-29 14:38:17.928655
使用 dateutil 在 Python 中解析 ISO 8601 日期
dateutil Python 模块是一个第三方模块,可用于扩展可通过内置 datetime 模块访问的功能。
要安装它,您可以使用 pip 命令:
pip install python-dateutil
输出:
Collecting python-dateutil
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 506.3 kB/s eta 0:00:00
Collecting six>=1.5
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, python-dateutil
Successfully installed python-dateutil-2.8.2 six-1.16.0
此外,您还可以使用另一个名为pytz 的第三方模块引入时区功能,该模块可以使用pip 命令安装。
pip install pytz
这些库可以轻松地创建基于时区的 ISO 8601 日期格式,并将 ISO 8601 DateTime 字符串解析为典型的 Python DateTime 对象。
例如,我们将使用美国/东部时区并使用 timezone()
方法、now()
方法和 isoformat()
方法创建一个 ISO 8601 DateTime 字符串。
from datetime import datetime
import pytz
usEasternDate = datetime.now(pytz.timezone('US/Eastern'))
print(usEasternDate)
usEasternDateISO = usEasternDate.isoformat()
print(usEasternDateISO)
输出:
2022-09-29 10:01:17.654150-04:00
2022-09-29T10:01:17.654150-04:00
然后将 ISO 8601 DateTime 字符串解析为 Python DateTime 对象,我们可以使用 parse()
方法,并将 ISO 日期作为其参数传递。
parsedDate = parser.parse(usEasternDateISO)
print(parsedDate)
输出:
2022-09-29 10:01:17.654150-04:00
相关文章
在 Python 中安装 Egg 文件
发布时间:2023/06/18 浏览次数:92 分类:Python
-
在本文中,我们将讨论如何在 Python 中安装 egg 文件,以及可用于实现此操作的工具。使用 setuptools 在 Python 中安装 egg 文件
使用 Python 获取 Redis 数据库中的所有键
发布时间:2023/06/18 浏览次数:127 分类:Python
-
本文将讨论如何使用Python获取 Redis 数据库中的所有键。使用 keys() 获取 Redis 数据库中的所有键 要使用 redis,我们需要安装它; 您可以查看 Redis 下载页面以了解操作方法。
修复 Python 中的 NLTK 词干异常
发布时间:2023/06/18 浏览次数:182 分类:Python
-
在 Python 中,我们可以借助 Python 的 NLTK 库提供的各种模块来完成此操作,但有时,您可能无法获得预期的结果。 本文将讨论为什么会出现这种差异,以及如何解决这些差异以获得我们想要的词
使用 Jython 在 Java 中运行 Python
发布时间:2023/06/18 浏览次数:118 分类:Python
-
本文将彻底解释使用 Jython 库在 Java 程序中运行 Python 的步骤。 这将是一个包含大量图像的详细分步过程,因此您不必担心“他是怎么做到的”。
Python 图像压缩
发布时间:2023/06/18 浏览次数:157 分类:Python
-
本篇文章将介绍使用 Python 中的 PIL 库压缩图像。在使用 PIL 库之前,请使用 pip 或 python 安装它。pip install Pillow
在 Python 中调整图像大小同时保持其纵横比
发布时间:2023/06/18 浏览次数:187 分类:Python
-
这篇 Python 文章的目的是解释我们如何在 Python 中调整图像大小同时保持其纵横比。 在 Python 中调整图像大小的方法还将通过适当的示例程序描述其用法。在 Python 中调整图像大小同时保持其纵横
Python类相等检查
发布时间:2023/06/18 浏览次数:130 分类:Python
-
本文讨论如何在 Python 中检查类相等性。 为此,本文讨论了如何在 Python 类中实现 eq() 方法。
Python 类工厂
发布时间:2023/06/18 浏览次数:83 分类:Python
-
本篇文章介绍了创建类工厂的不同方法。如何在 Python 中创建类工厂 有两种设计类工厂的方法; 一个在编码时创建一个类,而另一个在运行时创建一个类。
Python 抽象属性
发布时间:2023/06/18 浏览次数:99 分类:Python
-
本篇文章将介绍使用 abc 或抽象基类模块在 Python 中创建具有抽象属性的类。Python 抽象属性 面向对象编程中的抽象用于向用户隐藏不必要的信息。