日期对每个人都很重要,对我们使用的许多应用程序也至关重要。 作为一名开发人员,可能会对存在的不同时区或时间对象以及围绕它们工作感到困惑。
然而,通常存在使工作更容易的标准,这就是本文所需要的。 此外,我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime。
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 的不同变体,但以上将是本文的参考。
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 对象中指定的格式代码处理年、月、日、小时、分钟和秒。
类似于 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 模块是一个第三方模块,可用于扩展可通过内置 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