📜  在Python处理时区

📅  最后修改于: 2022-05-13 01:55:21.074000             🧑  作者: Mango

在Python处理时区

有一些标准库可以用于时区,这里我们将使用pytz 。该库有一个时区类,用于处理 UTC 和时区的任意固定偏移量。

安装

pytz是您必须安装的第三方软件包。要安装 pytz,请使用以下命令 -

入门

安装后导入 pytz 包,现在让我们看看如何传入时区。 Python中获取日期和时间信息的基本语法是:

上面的语法返回当前本地日期时间,没有任何时区信息。但是通过使用 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)


输出:

正如你现在看到的,我们得到了本地机器的日期时间信息,在 UTC 中,最后的时区偏移是 +00:00。

如果我们想获取特定时区的日期时间信息,我们只需要在参数中添加时区 –

句法:

参数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)

输出:

这里我们根据不同的时区和偏移量得到了不同的日期时间。偏移量还将显示 (+/-) 小时。我们还可以将任何时区转换为不同的时区。

在时区之间转换

astimezone()方法用于操作,即将日期时间对象转换为新的指定日期时间对象。它使用 datetime 对象的实例并返回新的时区信息。

句法:

为了准确获得我们需要的内容,将遵循以下语法。

句法 :

例子:

蟒蛇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)

输出:

pytz有大量可用的时区列表,您可以使用以下方法打印它们。

例子:



蟒蛇3

import pytz
  
for timeZone in pytz.all_timezones:
    print(timeZone)

输出: