我应该如何打印 Python 中特定时区的时间?
How should I print the time in a specific timezone in Python?
这道题真的很简单,基本就是题目了。我在西澳
是的,pytz 和 datetime 模块是正确的选择:
import pytz
from datetime import datetime
timezone = 'Australia/Perth'
py_timezone = pytz.timezone(timezone)
current_datetime = datetime.now(py_timezone)
如果您需要查找特定时区,您可以在 pytz 中使用 all_timezones
属性,这将 return 列出所有时区。
import pytz
all_timezones = pytz.all_timezones
pytz
是 likely to be deprecated 的未来。
从 Python 3.9(目前处于测试阶段)开始,更新更好的方法是使用 zoneinfo
模块。
阿姆斯特丹现在时间:
from datetime import datetime
from zoneinfo import ZoneInfo
now = datetime.now(tz=ZoneInfo("Europe/Amsterdam"))
将一个时区的时间转换为另一个时区:
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime(2020, 1, 1, 12, tzinfo=ZoneInfo("Asia/Ho_Chi_Minh"))
converted_dt = dt.astimezone(ZoneInfo("Africa/Windhoek"))
获取可用时区:
import zoneinfo
zoneinfo.available_timezones()
您已经可以在 Python 3.6+ 中将其与 backports.zoneinfo
package 一起使用。
还需要注意的重要一点是,如果您只想拥有 本地 时间,即根据您 OS 的时区设置,您只需要 datetime
.
from datetime import datetime
now = datetime.now()
# print(now)
# 2020-06-27 13:08:12.007814
now
将是一个天真的日期时间对象,即它不知道时区。 Python 默认情况下假定它属于您当地的时区(不是例如 UTC)。
您甚至可以在没有任何其他导入的情况下使其具有时区意识:
now = now.astimezone()
# print(now)
# 2020-06-27 13:08:12.007814+02:00 # I'm on CEST at the moment; UTC+2
如果您想实施不同的时区或更改时区,这里有一个示例如何使用 dateutil
:
import dateutil
awst = dateutil.tz.gettz('Australia/Perth')
now_naive = datetime.now()
now_aware = now_naive.replace(tzinfo=awst)
print(now_aware.strftime('%a %d %b %Y %H:%M:%S %z %Z'))
# Sat 27 Jun 2020 17:08:53 +0800 AWST
# same time in another timezone:
cest = dateutil.tz.gettz('Europe/Berlin')
now_aware = now_aware.astimezone(cest)
print(now_aware.strftime('%a %d %b %Y %H:%M:%S %z %Z'))
# Sat 27 Jun 2020 11:08:53 +0200 CEST
对于Python 3.9 zoneinfo
,方法基本相同,因此从dateutil 更改为zoneinfo 是可行的。
这道题真的很简单,基本就是题目了。我在西澳
是的,pytz 和 datetime 模块是正确的选择:
import pytz
from datetime import datetime
timezone = 'Australia/Perth'
py_timezone = pytz.timezone(timezone)
current_datetime = datetime.now(py_timezone)
如果您需要查找特定时区,您可以在 pytz 中使用 all_timezones
属性,这将 return 列出所有时区。
import pytz
all_timezones = pytz.all_timezones
pytz
是 likely to be deprecated 的未来。
从 Python 3.9(目前处于测试阶段)开始,更新更好的方法是使用 zoneinfo
模块。
阿姆斯特丹现在时间:
from datetime import datetime
from zoneinfo import ZoneInfo
now = datetime.now(tz=ZoneInfo("Europe/Amsterdam"))
将一个时区的时间转换为另一个时区:
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime(2020, 1, 1, 12, tzinfo=ZoneInfo("Asia/Ho_Chi_Minh"))
converted_dt = dt.astimezone(ZoneInfo("Africa/Windhoek"))
获取可用时区:
import zoneinfo
zoneinfo.available_timezones()
您已经可以在 Python 3.6+ 中将其与 backports.zoneinfo
package 一起使用。
还需要注意的重要一点是,如果您只想拥有 本地 时间,即根据您 OS 的时区设置,您只需要 datetime
.
from datetime import datetime
now = datetime.now()
# print(now)
# 2020-06-27 13:08:12.007814
now
将是一个天真的日期时间对象,即它不知道时区。 Python 默认情况下假定它属于您当地的时区(不是例如 UTC)。
您甚至可以在没有任何其他导入的情况下使其具有时区意识:
now = now.astimezone()
# print(now)
# 2020-06-27 13:08:12.007814+02:00 # I'm on CEST at the moment; UTC+2
如果您想实施不同的时区或更改时区,这里有一个示例如何使用 dateutil
:
import dateutil
awst = dateutil.tz.gettz('Australia/Perth')
now_naive = datetime.now()
now_aware = now_naive.replace(tzinfo=awst)
print(now_aware.strftime('%a %d %b %Y %H:%M:%S %z %Z'))
# Sat 27 Jun 2020 17:08:53 +0800 AWST
# same time in another timezone:
cest = dateutil.tz.gettz('Europe/Berlin')
now_aware = now_aware.astimezone(cest)
print(now_aware.strftime('%a %d %b %Y %H:%M:%S %z %Z'))
# Sat 27 Jun 2020 11:08:53 +0200 CEST
对于Python 3.9 zoneinfo
,方法基本相同,因此从dateutil 更改为zoneinfo 是可行的。