Pytz常用时区按偏移量排序

时间:2013-08-29 13:56:09

标签: python timezone

我创建了这个函数来获得带有偏移量的两元组公共时区。

[(item, datetime.datetime.now(pytz.timezone(item)).strftime('%z') + " " + item) for item in pytz.common_timezones]

我从函数

中得到了类似的东西
[('Africa/Abidjan', '+0000 Africa/Abidjan'), ('Africa/Accra', '+0000 Africa/Accra'), ('Africa/Addis_Ababa', '+0300 Africa/Addis_Ababa'), ('Africa/Algiers', '+0100 Africa/Algiers'), ('Africa/Asmara', '+0300 Africa/Asmara'), ('Africa/Bamako', '+0000 Africa/Bamako'), ('Africa/Bangui', '+0100 Africa/Bangui'), ('Africa/Banjul', '+0000 Africa/Banjul'), ('Africa/Bissau', '+0000 Africa/Bissau'), ('Africa/Blantyre', '+0200 Africa/Blantyre'), ('Africa/Brazzaville', '+0100 Africa/Brazzaville'), ('Africa/Bujumbura', '+0200 Africa/Bujumbura'), ('Africa/Cairo', '+0200 Africa/Cairo'), ('Africa/Casablanca', '+0100 Africa/Casablanca'), ('Africa/Ceuta', '+0200 Africa/Ceuta'), ('Africa/Conakry', '+0000 Africa/Conakry'), ('Africa/Dakar', '+0000 Africa/Dakar'), ('Africa/Dar_es_Salaam', '+0300 Africa/Dar_es_Salaam'), ('Africa/Djibouti', '+0300 Africa/Djibouti'), ('Africa/Douala', '+0100 Africa/Douala'), ('Africa/El_Aaiun', '+0000 Africa/El_Aaiun'), ('Africa/Freetown', '+0000 Africa/Freetown'), ('Africa/Gaborone', '+0200 Africa/Gaborone'), ('Africa/Harare', '+0200 Africa/Harare'), ('Africa/Johannesburg', '+0200 Africa/Johannesburg'), ('Africa/Juba', '+0300 Africa/Juba'), ('Africa/Kampala', '+0300 Africa/Kampala'), ('Africa/Khartoum', '+0300 Africa/Khartoum'), ('Africa/Kigali', '+0200 Africa/Kigali'), ('Africa/Kinshasa', '+0100 Africa/Kinshasa'), ('Africa/Lagos', '+0100 Africa/Lagos'), ('Africa/Libreville', '+0100 Africa/Libreville'), ('Africa/Lome', '+0000 Africa/Lome'), ('Africa/Luanda', '+0100 Africa/Luanda'), ('Africa/Lubumbashi', '+0200 Africa/Lubumbashi'), ('Africa/Lusaka', '+0200 Africa/Lusaka'), (

如何通过抵消对其进行排序?目前它是按ASC排序

4 个答案:

答案 0 :(得分:5)

我不确定我是否能正确理解你,但你可以试试这个:

>>> tz = [(item, datetime.datetime.now(pytz.timezone(item)).strftime('%z') + " " + item) for item in pytz.common_timezones]
>>> sorted(tz, key=lambda x: int(x[1].split()[0]))
[('Pacific/Midway', '-1100 Pacific/Midway'), ('Pacific/Niue', '-1100 Pacific/Niue'), ('Pacific/Pago_Pago', '-1100 Pacific/Pago_Pago'), ('Pacific/Honolulu', '-1000 Pacific/Honolulu'), ...

答案 1 :(得分:1)

试试这个:

tzs = [('Africa/Abidjan', '+0000 Africa/Abidjan'), ('Africa/Accra', '+0000 Africa/Accra'), ('Africa/Addis_Ababa', '+0300 Africa/Addis_Ababa'), ('Africa/Algiers', '+0100 Africa/Algiers'), ('Africa/Asmara', '+0300 Africa/Asmara'), ('Africa/Bamako', '+0000 Africa/Bamako'), ('Africa/Bangui', '+0100 Africa/Bangui'), ('Africa/Banjul', '+0000 Africa/Banjul'), ('Africa/Bissau', '+0000 Africa/Bissau'), ('Africa/Blantyre', '+0200 Africa/Blantyre'), ('Africa/Brazzaville', '+0100 Africa/Brazzaville'), ('Africa/Bujumbura', '+0200 Africa/Bujumbura'), ('Africa/Cairo', '+0200 Africa/Cairo'), ('Africa/Casablanca', '+0100 Africa/Casablanca'), ('Africa/Ceuta', '+0200 Africa/Ceuta'), ('Africa/Conakry', '+0000 Africa/Conakry'), ('Africa/Dakar', '+0000 Africa/Dakar'), ('Africa/Dar_es_Salaam', '+0300 Africa/Dar_es_Salaam'), ('Africa/Djibouti', '+0300 Africa/Djibouti'), ('Africa/Douala', '+0100 Africa/Douala'), ('Africa/El_Aaiun', '+0000 Africa/El_Aaiun'), ('Africa/Freetown', '+0000 Africa/Freetown'), ('Africa/Gaborone', '+0200 Africa/Gaborone'), ('Africa/Harare', '+0200 Africa/Harare'), ('Africa/Johannesburg', '+0200 Africa/Johannesburg'), ('Africa/Juba', '+0300 Africa/Juba'), ('Africa/Kampala', '+0300 Africa/Kampala'), ('Africa/Khartoum', '+0300 Africa/Khartoum'), ('Africa/Kigali', '+0200 Africa/Kigali'), ('Africa/Kinshasa', '+0100 Africa/Kinshasa'), ('Africa/Lagos', '+0100 Africa/Lagos'), ('Africa/Libreville', '+0100 Africa/Libreville'), ('Africa/Lome', '+0000 Africa/Lome'), ('Africa/Luanda', '+0100 Africa/Luanda'), ('Africa/Lubumbashi', '+0200 Africa/Lubumbashi'), ('Africa/Lusaka', '+0200 Africa/Lusaka')]

pre_sort_tzs = []

for tz in tzs:
    pre_sort_tzs.append([int(tz[1][0:5], 10), (tz)])

sorted_tzs = []

for tz in sorted(pre_sort_tzs):
    sorted_tzs.append(tz[1])

print sorted_tzs

输出:

[('Africa/Abidjan', '+0000 Africa/Abidjan'), ('Africa/Accra', '+0000 Africa/Accra'), ('Africa/Bamako', '+0000 Africa/Bamako'), ('Africa/Banjul', '+0000 Africa/Banjul'), ('Africa/Bissau', '+0000 Africa/Bissau'), ('Africa/Conakry', '+0000 Africa/Conakry'), ('Africa/Dakar', '+0000 Africa/Dakar'), ('Africa/El_Aaiun', '+0000 Africa/El_Aaiun'), ('Africa/Freetown', '+0000 Africa/Freetown'), ('Africa/Lome', '+0000 Africa/Lome'), ('Africa/Algiers', '+0100 Africa/Algiers'), ('Africa/Bangui', '+0100 Africa/Bangui'), ('Africa/Brazzaville', '+0100 Africa/Brazzaville'), ('Africa/Casablanca', '+0100 Africa/Casablanca'), ('Africa/Douala', '+0100 Africa/Douala'), ('Africa/Kinshasa', '+0100 Africa/Kinshasa'), ('Africa/Lagos', '+0100 Africa/Lagos'), ('Africa/Libreville', '+0100 Africa/Libreville'), ('Africa/Luanda', '+0100 Africa/Luanda'), ('Africa/Blantyre', '+0200 Africa/Blantyre'), ('Africa/Bujumbura', '+0200 Africa/Bujumbura'), ('Africa/Cairo', '+0200 Africa/Cairo'), ('Africa/Ceuta', '+0200 Africa/Ceuta'), ('Africa/Gaborone', '+0200 Africa/Gaborone'), ('Africa/Harare', '+0200 Africa/Harare'), ('Africa/Johannesburg', '+0200 Africa/Johannesburg'), ('Africa/Kigali', '+0200 Africa/Kigali'), ('Africa/Lubumbashi', '+0200 Africa/Lubumbashi'), ('Africa/Lusaka', '+0200 Africa/Lusaka'), ('Africa/Addis_Ababa', '+0300 Africa/Addis_Ababa'), ('Africa/Asmara', '+0300Africa/Asmara'), ('Africa/Dar_es_Salaam', '+0300 Africa/Dar_es_Salaam'), ('Africa/Djibouti', '+0300 Africa/Djibouti'), ('Africa/Juba', '+0300 Africa/Juba'), ('Africa/Kampala', '+0300 Africa/Kampala'), ('Africa/Khartoum', '+0300 Africa/Khartoum')]

更短的版本:

tzs = [...]

pre_sort_tzs = map(lambda x: [int(x[1][0:5], 10), (x)], tzs)
sorted_tzs = map(lambda x: x[1], sorted(pre_sort_tzs))

print sorted_tzs

答案 2 :(得分:0)

我在这个项目中找到了答案

https://github.com/brosner/django-timezones/blob/master/timezones/zones.py

这正是我想要的。

我导入了PRETTY_TIMEZONE_CHOICES,这个选项的顺序正确。

答案 3 :(得分:0)

对于那些喜欢熊猫方式的人:

from pytz import timezone,common_timezones as tz_names
from datetime import datetime as dt

numeric_offset = [int(dt.now(timezone(tz)).strftime('%z')) for tz in tz_names]
pd.Series(numeric_offset,index=tz_names).sort_values()

输出:

Pacific/Pago_Pago       -1100
Pacific/Midway          -1100
Pacific/Niue            -1100
US/Hawaii               -1000
Pacific/Honolulu        -1000
Pacific/Tahiti          -1000
Pacific/Rarotonga       -1000
America/Adak            -1000
Pacific/Marquesas        -930
America/Sitka            -900
America/Anchorage        -900
Pacific/Gambier          -900
America/Nome             -900
US/Alaska                -900
America/Yakutat          -900
America/Metlakatla       -900
America/Juneau           -900
America/Vancouver        -800
America/Whitehorse       -800
Canada/Pacific           -800
America/Los_Angeles      -800
America/Tijuana          -800
US/Pacific               -800
Pacific/Pitcairn         -800
America/Dawson           -800
America/Hermosillo       -700
America/Fort_Nelson      -700
America/Cambridge_Bay    -700
America/Mazatlan         -700
America/Edmonton         -700
                         ... 
Asia/Srednekolymsk       1100
Pacific/Pohnpei          1100
Australia/Sydney         1100
Pacific/Kosrae           1100
Australia/Hobart         1100
Pacific/Guadalcanal      1100
Pacific/Efate            1100
Asia/Sakhalin            1100
Australia/Lord_Howe      1100
Australia/Melbourne      1100
Asia/Magadan             1100
Pacific/Bougainville     1100
Pacific/Wallis           1200
Pacific/Wake             1200
Pacific/Tarawa           1200
Asia/Kamchatka           1200
Pacific/Nauru            1200
Pacific/Majuro           1200
Pacific/Kwajalein        1200
Asia/Anadyr              1200
Pacific/Funafuti         1200
Antarctica/McMurdo       1300
Pacific/Tongatapu        1300
Pacific/Enderbury        1300
Pacific/Fiji             1300
Pacific/Auckland         1300
Pacific/Fakaofo          1300
Pacific/Chatham          1345
Pacific/Apia             1400
Pacific/Kiritimati       1400
Length: 439, dtype: int64