在Python处理时区
有一些标准库可以用于时区,这里我们将使用pytz 。该库有一个时区类,用于处理 UTC 和时区的任意固定偏移量。
安装
pytz是您必须安装的第三方软件包。要安装 pytz,请使用以下命令 -
pip install pytz
入门
安装后导入 pytz 包,现在让我们看看如何传入时区。 Python中获取日期和时间信息的基本语法是:
datetime.datetime.now()
上面的语法返回当前本地日期时间,没有任何时区信息。但是通过使用 pytz 包,我们可以处理各个时区中的日期时间信息——now ()为我们提供了传入时区的选项,因此如果您将时区留空,那么它也会返回当前本地日期时间。 now() 的输出取决于机器。主机的本地时间和时区设置将决定输出。
因此,为了顺利使用时区,建议使用 UTC 作为您的基准时区。要获得协调世界时,即 UTC 时间,我们只需将参数传递给 now()函数。要获得 UTC 时间,我们可以直接使用 'pytz.utc' 作为 now()函数的参数作为 'now(pytz.utc)'。偏移量将在末尾显示为(+ 或 – 小时)。
下面的代码显示了机器的本地时间和带有偏移量的 UTC 时间。
例子:
Python3
import datetime
import pytz
dtObject_local = datetime.datetime.now()
dtObject_utc = datetime.datetime.now(pytz.utc)
print(dtObject_local)
print(dtObject_utc)
Python3
import datetime
import pytz
dtObject_utc = datetime.datetime.now(pytz.utc)
dtObject_asia = datetime.datetime.now(pytz.timezone('Asia/Kolkata'))
dtObject_usc = datetime.datetime.now(pytz.timezone('US/Central'))
dtObject_turkey = datetime.datetime.now(pytz.timezone('Turkey'))
dtObject_eoslo = datetime.datetime.now(pytz.timezone('Europe/Oslo'))
dtObject_abelem = datetime.datetime.now(pytz.timezone('America/Belem'))
print(dtObject_utc)
print(dtObject_asia)
print(dtObject_usc)
print(dtObject_turkey)
print(dtObject_eoslo)
print(dtObject_abelem)
Python3
import datetime
import pytz
# getting our local timezone
dtObject_local = datetime.datetime.now()
# converting local timezone to 'US/Central'
dtObject_usc = dtObject_local.astimezone(pytz.timezone('US/Central'))
# now converting 'US/Central' timezone to 'Pacific/Chuuk'
dtObject_pchuuk = dtObject_usc.astimezone(pytz.timezone('Pacific/Chuuk'))
print(dtObject_local)
print(dtObject_usc)
print(dtObject_pchuuk)
Python3
import pytz
for timeZone in pytz.all_timezones:
print(timeZone)
输出:
2021-05-28 12:19:56.962055
2021-05-28 06:49:56.962055+00:00
正如你现在看到的,我们得到了本地机器的日期时间信息,在 UTC 中,最后的时区偏移是 +00:00。
如果我们想获取特定时区的日期时间信息,我们只需要在参数中添加时区 –
句法:
.now(pytz.timezone(‘ YOUR_TIMEZONE ‘))
参数pytz.timezone允许我们将时区信息指定为字符串。我们可以传入任何可用的时区,并获得该时区的当前日期时间,它还将打印相对于 UTC 的偏移量。即,UTC 时区(+00:00) 与指定时区之间的差异。
例子:
蟒蛇3
import datetime
import pytz
dtObject_utc = datetime.datetime.now(pytz.utc)
dtObject_asia = datetime.datetime.now(pytz.timezone('Asia/Kolkata'))
dtObject_usc = datetime.datetime.now(pytz.timezone('US/Central'))
dtObject_turkey = datetime.datetime.now(pytz.timezone('Turkey'))
dtObject_eoslo = datetime.datetime.now(pytz.timezone('Europe/Oslo'))
dtObject_abelem = datetime.datetime.now(pytz.timezone('America/Belem'))
print(dtObject_utc)
print(dtObject_asia)
print(dtObject_usc)
print(dtObject_turkey)
print(dtObject_eoslo)
print(dtObject_abelem)
输出:
2021-05-28 23:12:56.559011+00:00
2021-05-29 04:42:58.027452+05:30
2021-05-28 18:12:58.072254-05:00
2021-05-29 02:12:58.092257+03:00
2021-05-29 01:12:58.107930+02:00
2021-05-28 20:12:58.109932-03:00
这里我们根据不同的时区和偏移量得到了不同的日期时间。偏移量还将显示 (+/-) 小时。我们还可以将任何时区转换为不同的时区。
在时区之间转换
astimezone()方法用于操作,即将日期时间对象转换为新的指定日期时间对象。它使用 datetime 对象的实例并返回新的时区信息。
句法:
astimezone(pytz.timezone(‘ NEW_TIMEZONE ‘))
为了准确获得我们需要的内容,将遵循以下语法。
句法 :
dtObj = datetimeObject_instance.astimezone(pytz.timezone(‘ NEW_TIMEZONE ‘))
where,
- dtObj : which stores the returned datetime object with newly created time date
- datetimeObject_instance : currently available datetime object (i.e., reference to the local date time)
- NEW_TIMEZONE : timezone information which should be changed to
例子:
蟒蛇3
import datetime
import pytz
# getting our local timezone
dtObject_local = datetime.datetime.now()
# converting local timezone to 'US/Central'
dtObject_usc = dtObject_local.astimezone(pytz.timezone('US/Central'))
# now converting 'US/Central' timezone to 'Pacific/Chuuk'
dtObject_pchuuk = dtObject_usc.astimezone(pytz.timezone('Pacific/Chuuk'))
print(dtObject_local)
print(dtObject_usc)
print(dtObject_pchuuk)
输出:
2021-05-29 04:46:26.288233
2021-05-28 18:16:26.288233-05:00
2021-05-29 09:16:26.288233+10:00
pytz有大量可用的时区列表,您可以使用以下方法打印它们。
例子:
蟒蛇3
import pytz
for timeZone in pytz.all_timezones:
print(timeZone)
输出:
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
.
.
.
US/Samoa
UTC
Universal
W-SU
WET
Zulu