Python—给定时间戳UTC和UTC偏移量的时区名称

Python—给定时间戳UTC和UTC偏移量的时区名称,python,date,datetime,timezone,timezone-offset,Python,Date,Datetime,Timezone,Timezone Offset,我正在尝试构建一个函数,如下所示: 输入 UTC时间戳(以毫秒为单位),例如: 1456865863633 UTC偏移量,或对UTC时间戳加/减以获取相应时区中的时间的毫秒数,例如: -14400 输出 时区名称,格式如下: US/Alaska US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern US/Hawaii . . . 我一直在尝试使用datetime和pytz库来找到rught组合,但到目前为止还没有成功

我正在尝试构建一个函数,如下所示:

输入

  • UTC时间戳(以毫秒为单位),例如:
1456865863633

  • UTC偏移量,或对UTC时间戳加/减以获取相应时区中的时间的毫秒数,例如:
-14400

输出 时区名称,格式如下:

US/Alaska
US/Aleutian
US/Arizona
US/Central
US/East-Indiana
US/Eastern
US/Hawaii
.
.
.
我一直在尝试使用datetime和pytz库来找到rught组合,但到目前为止还没有成功


有什么想法吗?

你可以在所有时区循环

for name in pytz.all_timezones:
并将日期的utcoffset与给定偏移量进行比较:

if date.utcoffset().total_seconds() == utcoffset:
    result.append(name)

印刷品

['America/Anguilla', 'America/Antigua', 'America/Aruba', 'America/Barbados', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Campo_Grande', 'America/Cuiaba', 'America/Curacao', 'America/Dominica', 'America/Glace_Bay', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guyana', 'America/Halifax', 'America/Kralendijk', 'America/La_Paz', 'America/Lower_Princes', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Moncton', 'America/Montserrat', 'America/Port_of_Spain', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Santo_Domingo', 'America/St_Barthelemy', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Thule', 'America/Tortola', 'America/Virgin', 'Atlantic/Bermuda', 'Brazil/West', 'Canada/Atlantic', 'Etc/GMT+4']

你可以遍历所有时区

for name in pytz.all_timezones:
并将日期的utcoffset与给定偏移量进行比较:

if date.utcoffset().total_seconds() == utcoffset:
    result.append(name)

印刷品

['America/Anguilla', 'America/Antigua', 'America/Aruba', 'America/Barbados', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Campo_Grande', 'America/Cuiaba', 'America/Curacao', 'America/Dominica', 'America/Glace_Bay', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guyana', 'America/Halifax', 'America/Kralendijk', 'America/La_Paz', 'America/Lower_Princes', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Moncton', 'America/Montserrat', 'America/Port_of_Spain', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Santo_Domingo', 'America/St_Barthelemy', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Thule', 'America/Tortola', 'America/Virgin', 'Atlantic/Bermuda', 'Brazil/West', 'Canada/Atlantic', 'Etc/GMT+4']

以下是该方法的不同实现:

如果输入是POSIX时间(毫秒):

>>> from datetime import timedelta
>>> dt = datetime(1970,1,1,tzinfo=pytz.utc) + timedelta(milliseconds=1456865863633)
>>> timezones_from_utc_offset(offset=timedelta(seconds=-14400), now=dt)
{'America/Anguilla',
 'America/Antigua',
 'America/Aruba',
 'America/Barbados',
 'America/Blanc-Sablon',
 'America/Boa_Vista',
 'America/Campo_Grande',
 'America/Cuiaba',
 'America/Curacao',
 'America/Dominica',
 'America/Glace_Bay',
 'America/Goose_Bay',
 'America/Grand_Turk',
 'America/Grenada',
 'America/Guadeloupe',
 'America/Guyana',
 'America/Halifax',
 'America/Kralendijk',
 'America/La_Paz',
 'America/Lower_Princes',
 'America/Manaus',
 'America/Marigot',
 'America/Martinique',
 'America/Moncton',
 'America/Montserrat',
 'America/Port_of_Spain',
 'America/Porto_Velho',
 'America/Puerto_Rico',
 'America/Santo_Domingo',
 'America/St_Barthelemy',
 'America/St_Kitts',
 'America/St_Lucia',
 'America/St_Thomas',
 'America/St_Vincent',
 'America/Thule',
 'America/Tortola',
 'America/Virgin',
 'Atlantic/Bermuda',
 'Brazil/West',
 'Canada/Atlantic',
 'Etc/GMT+4'}

以下是该方法的不同实现:

如果输入是POSIX时间(毫秒):

>>> from datetime import timedelta
>>> dt = datetime(1970,1,1,tzinfo=pytz.utc) + timedelta(milliseconds=1456865863633)
>>> timezones_from_utc_offset(offset=timedelta(seconds=-14400), now=dt)
{'America/Anguilla',
 'America/Antigua',
 'America/Aruba',
 'America/Barbados',
 'America/Blanc-Sablon',
 'America/Boa_Vista',
 'America/Campo_Grande',
 'America/Cuiaba',
 'America/Curacao',
 'America/Dominica',
 'America/Glace_Bay',
 'America/Goose_Bay',
 'America/Grand_Turk',
 'America/Grenada',
 'America/Guadeloupe',
 'America/Guyana',
 'America/Halifax',
 'America/Kralendijk',
 'America/La_Paz',
 'America/Lower_Princes',
 'America/Manaus',
 'America/Marigot',
 'America/Martinique',
 'America/Moncton',
 'America/Montserrat',
 'America/Port_of_Spain',
 'America/Porto_Velho',
 'America/Puerto_Rico',
 'America/Santo_Domingo',
 'America/St_Barthelemy',
 'America/St_Kitts',
 'America/St_Lucia',
 'America/St_Thomas',
 'America/St_Vincent',
 'America/Thule',
 'America/Tortola',
 'America/Virgin',
 'Atlantic/Bermuda',
 'Brazil/West',
 'Canada/Atlantic',
 'Etc/GMT+4'}

许多时区都有相同的UTC偏移,这使得从一个时区到另一个时区很容易,但从一个时区到另一个时区却很难。当为给定的偏移量找到多个时区时,您希望采取什么行为?我想知道世界上哪些地区与UTC的给定偏移量相对应,因此我想检索列表中可用的所有时区名称。酷,那么unutbu的答案看起来不错。相关:许多时区具有相同的UTC偏移量,这使得从一个时区到另一个时区很容易,但不能从一个时区到另一个时区。当为给定偏移量找到多个时区时,您希望采取什么行为?我想知道世界上哪些地区与UTC的给定偏移量相对应,因此我想检索列表中可用的所有时区名称。很酷,那么unutbu的答案看起来不错。相关: