在 Python 中将 UTC 转换为 CST

Vaibhhav Khetarpal 2023年1月30日 2021年12月4日
  1. 在 Python 中使用 dateutil.tz 模块将日期和时间从 UTC 转换为 CST
  2. 在 Python 中使用 pytz 模块将日期和时间从 UTC 转换为 CST
  3. 在 Python 中使用 zoneinfo 模块将日期和时间从 UTC 转换为 CST
在 Python 中将 UTC 转换为 CST

Python 以非常复杂的方式存储日期和时间。它有一个数据类型专门用于存储这种类型的数据。此外,Python 还提供了一个 datetime 模块,该模块提供了几个用于操作日期和时间的类。

转换为不同的时区是操作日期和时间的重要部分。在本文中,我们将讨论两个这样的时区,即 UTC 和 CST,以及将前者转换为后者的不同方法。

datetime 模块是必需的,需要在下面文章中提到的所有方法中导入和使用。

在 Python 中使用 dateutil.tz 模块将日期和时间从 UTC 转换为 CST

dateutil 模块通过提供一些重要的扩展来增强标准的 datetime 模块。dateutil.tz 模块提供了对抽象 datetime.tzinfo 类型进行子类化的时区实现。

在这里,我们将经常使用 tz.gettz() 函数,它本质上是从作为参数传递的给定字符串中检索时区的对象。

以下代码使用 dateutil.tz 模块在 python 中将日期和时间从 UTC 转换为 CST。

import datetime
from dateutil import tz

from_zone = tz.gettz('UTC')
to_zone = tz.gettz('America/Chicago')
json_data = {'time': "2021-10-08T08:17:42Z"} 
utc = datetime.datetime.strptime(json_data['time'], "%Y-%m-%dT%H:%M:%SZ")
utc = utc.replace(tzinfo=from_zone)
cst = utc.astimezone(to_zone)
print(utc)
print(cst)

上面的代码提供了以下输出:

2021-10-08 08:17:42+00:00
2021-10-08 03:17:42-05:00

在 Python 中使用 pytz 模块将日期和时间从 UTC 转换为 CST

pytz 模块支持绝大多数时区,使其成为提供日期和时间转换功能的完美模块,并提供在程序员的 python 应用软件中实现简单时区计算的功能。

此外,pytz 模块允许创建智能的 datetime 对象或知道其时区的实例。pytz 模块需要手动安装,可以使用 pip 命令完成。

以下代码使用 pytz 模块在 Python 中将日期和时间从 UTC 转换为 CST

from datetime import datetime, timezone
import pytz

fmt = '%Y-%m-%d %H:%M:%S %Z%z'
e = pytz.timezone('US/Central')

time_from_utc = datetime.fromtimestamp(1607020200, tz=timezone.utc)
time_from = time_from_utc.astimezone(e)
time_from.strftime(fmt)
time_to_utc = datetime.fromtimestamp(1609785000, tz=timezone.utc)
time_to = time_to_utc.astimezone(tz=pytz.timezone('US/Central'))
print(time_to_utc)
print(time_to)

上面的代码提供了以下输出:

2021-01-04 18:30:10+00:00
2021-01-04 12:30:10-06:00

尽管 dateutil.tzpytz 模块都用于在 Python 中实现类似的东西,但它们有一些区别。

  • pytz 模块支持几乎所有的时区,比 dateutil.tz 模块提供的要多得多。
  • pytz 模块的库明显更优化。
  • pytz 模块在历史上比 dateutil.tz 更快,但在最近几次更新中差距已经缩小。
  • pytz 模块不够稳定时,建议在早期版本的 Python 中使用 dateutil.tz 模块。

在 Python 中使用 zoneinfo 模块将日期和时间从 UTC 转换为 CST

随着 Python 3.9 的引入,出现了 zoneinfo 模块,无需安装任何其他第三方库来管理时区。zoneinfo 模块自己处理所有事情。

zoneinfo 模块用于提供强大的时区实现,如 PEP 615 中指定的那样,可以支持 IANA 时区数据库。

以下代码使用 zoneinfo 模块在 Python 中将日期和时间从 UTC 转换为 CST。

from datetime import datetime
from zoneinfo import ZoneInfo   

naive_datetime = datetime(2021, 10, 08, 12, 0, 0)
user_tz_preference = ZoneInfo('US/Central')

user_datetime = naive_datetime.replace(tzinfo=user_tz_preference)
user_datetime = datetime(2011, 10, 26, 12, tzinfo=ZoneInfo('US/Central'))
utc_datetime = user_datetime.astimezone(ZoneInfo('UTC'))
print(user_datetime.isoformat())
print(utc_datetime.isoformat())

上面的代码提供了以下输出:

# 2021-10-08T12:00:00-06:00
# 2021-10-08T19:00:00+00:00
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

相关文章 - Python DateTime