是否可以得到此操作的反向:
import dateutil.tz
tz_ny = dateutil.tz.tz.gettz('America/New_York')
print(type(tz_ny))
print(tz_ny)
这将打印:
dateutil.tz.tz.tzfile
tzfile('/usr/share/zoneinfo/America/New_York')
如何在给定 tzfile 类型的tz_ny的情况下恢复"美国/New_York"?
注:注: 如果日期在夏季,tz_ny.tzname(datetime.datetime(2017,1,1))
返回"EST"或"EDT"。
如果您只想要tzfile
中的时区名称而不是完整路径,您可以例如
import dateutil.tz
tz_ny = dateutil.tz.tz.gettz('America/New_York')
tz_ny_zone= "/".join(tz_ny._filename.split('/')[-2:])
print(tz_ny_zone)
这让你
'America/New_York'
编辑:只是为了完整起见,因为标题只提到了tzfile
:除了dateutil
还有其他模块可以用来获得tzfile
。一种方法是使用 pytz
模块中的timezone()
:
import pytz
tz_ny_pytz = pytz.timezone('America/New_York')
根据您最初使用的模块,tzfile
的类别会有所不同
print(type(tz_ny))
print(type(ty_ny_pytz))
指纹
<class 'dateutil.tz.tz.tzfile'>
<class 'pytz.tzfile.America/New_York'>
对于pytz
对象,有一种更直接的方法可以使用 .zone
属性以人类可读的形式访问时区:
print(tz_ny_pytz.zone)
生产
'America/New_York'
原来有一个受保护的成员变量....
tz_ny._filename
是
'/usr/share/zoneinfo/America/New_York'