Skip to content

Instantly share code, notes, and snippets.

@wbchn
Last active March 23, 2017 05:16
Show Gist options
  • Save wbchn/d47d0b98effee1c3411a2d8619a15da9 to your computer and use it in GitHub Desktop.
Save wbchn/d47d0b98effee1c3411a2d8619a15da9 to your computer and use it in GitHub Desktop.
获取时区偏移,是否存在冬、夏令时切换
from datetime import datetime, timedelta
from pytz import timezone
import pytz
utc = pytz.utc
# 如果有冬令时、夏令时切换,下面两个时间的时区偏移不相同(仅针对美国来说,其他地区酌情调整)
utc_dt = datetime(2017, 3, 23, 0, 0, 0, tzinfo=utc)
utc_dt2 = datetime(2017, 1, 1, 0, 0, 0, tzinfo=utc)
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
tzs = "Africa/Cairo, Africa/Casablanca, Africa/Harare, Africa/Monrovia, Africa/Nairobi, Africa/Tripoli, Africa/Windhoek, America/Araguaina, America/Asuncion, America/Bogota, America/Caracas, America/Chihuahua, America/Cuiaba, America/Denver, America/Fortaleza, America/Guatemala, America/Halifax, America/Manaus, America/Matamoros, America/Monterrey, America/Montevideo, America/Phoenix, America/Santiago, America/Tijuana, Asia/Amman, Asia/Ashgabat, Asia/Baghdad, Asia/Baku, Asia/Bangkok, Asia/Beirut, Asia/Calcutta, Asia/Damascus, Asia/Dhaka, Asia/Irkutsk, Asia/Jerusalem, Asia/Kabul, Asia/Karachi, Asia/Kathmandu, Asia/Krasnoyarsk, Asia/Magadan, Asia/Muscat, Asia/Novosibirsk, Asia/Riyadh, Asia/Seoul, Asia/Shanghai, Asia/Singapore, Asia/Taipei, Asia/Tehran, Asia/Tokyo, Asia/Ulaanbaatar, Asia/Vladivostok, Asia/Yakutsk, Asia/Yerevan, Atlantic/Azores, Australia/Adelaide, Australia/Brisbane, Australia/Darwin, Australia/Hobart, Australia/Perth, Australia/Sydney, Canada/Newfoundland, Canada/Saskatchewan, Brazil/East, Europe/Amsterdam, Europe/Athens, Europe/Dublin, Europe/Helsinki, Europe/Istanbul, Europe/Kaliningrad, Europe/Moscow, Europe/Paris, Europe/Prague, Europe/Sarajevo, Pacific/Auckland, Pacific/Fiji, Pacific/Guam, Pacific/Honolulu, Pacific/Samoa, US/Alaska, US/Central, US/Eastern, US/East-Indiana, US/Pacific, UTC"
for tz in tzs.split(', '):
eastern = timezone(tz)
loc_dt = utc_dt.astimezone(eastern)
loc_dt2 = utc_dt2.astimezone(eastern)
print tz, loc_dt.strftime(fmt), loc_dt2.strftime(fmt)
# Results
# Africa/Cairo 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Africa/Casablanca 2017-03-23 00:00:00 WET+0000 2017-01-01 00:00:00 WET+0000
# Africa/Harare 2017-03-23 02:00:00 CAT+0200 2017-01-01 02:00:00 CAT+0200
# Africa/Monrovia 2017-03-23 00:00:00 GMT+0000 2017-01-01 00:00:00 GMT+0000
# Africa/Nairobi 2017-03-23 03:00:00 EAT+0300 2017-01-01 03:00:00 EAT+0300
# Africa/Tripoli 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Africa/Windhoek 2017-03-23 02:00:00 WAST+0200 2017-01-01 02:00:00 WAST+0200
# America/Araguaina 2017-03-22 21:00:00 BRT-0300 2016-12-31 21:00:00 BRT-0300
# America/Asuncion 2017-03-22 21:00:00 PYST-0300 2016-12-31 21:00:00 PYST-0300
# America/Bogota 2017-03-22 19:00:00 COT-0500 2016-12-31 19:00:00 COT-0500
# America/Caracas 2017-03-22 20:00:00 VET-0400 2016-12-31 20:00:00 VET-0400
# America/Chihuahua 2017-03-22 17:00:00 MST-0700 2016-12-31 17:00:00 MST-0700
# America/Cuiaba 2017-03-22 20:00:00 AMT-0400 2016-12-31 21:00:00 AMST-0300
# America/Denver 2017-03-22 18:00:00 MDT-0600 2016-12-31 17:00:00 MST-0700
# America/Fortaleza 2017-03-22 21:00:00 BRT-0300 2016-12-31 21:00:00 BRT-0300
# America/Guatemala 2017-03-22 18:00:00 CST-0600 2016-12-31 18:00:00 CST-0600
# America/Halifax 2017-03-22 21:00:00 ADT-0300 2016-12-31 20:00:00 AST-0400
# America/Manaus 2017-03-22 20:00:00 AMT-0400 2016-12-31 20:00:00 AMT-0400
# America/Matamoros 2017-03-22 19:00:00 CDT-0500 2016-12-31 18:00:00 CST-0600
# America/Monterrey 2017-03-22 18:00:00 CST-0600 2016-12-31 18:00:00 CST-0600
# America/Montevideo 2017-03-22 21:00:00 UYT-0300 2016-12-31 21:00:00 UYT-0300
# America/Phoenix 2017-03-22 17:00:00 MST-0700 2016-12-31 17:00:00 MST-0700
# America/Santiago 2017-03-22 21:00:00 CLST-0300 2016-12-31 21:00:00 CLST-0300
# America/Tijuana 2017-03-22 17:00:00 PDT-0700 2016-12-31 16:00:00 PST-0800
# Asia/Amman 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Asia/Ashgabat 2017-03-23 05:00:00 +05+0500 2017-01-01 05:00:00 +05+0500
# Asia/Baghdad 2017-03-23 03:00:00 AST+0300 2017-01-01 03:00:00 AST+0300
# Asia/Baku 2017-03-23 04:00:00 +04+0400 2017-01-01 04:00:00 +04+0400
# Asia/Bangkok 2017-03-23 07:00:00 ICT+0700 2017-01-01 07:00:00 ICT+0700
# Asia/Beirut 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Asia/Calcutta 2017-03-23 05:30:00 IST+0530 2017-01-01 05:30:00 IST+0530
# Asia/Damascus 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Asia/Dhaka 2017-03-23 06:00:00 BDT+0600 2017-01-01 06:00:00 BDT+0600
# Asia/Irkutsk 2017-03-23 08:00:00 +08+0800 2017-01-01 08:00:00 +08+0800
# Asia/Jerusalem 2017-03-23 02:00:00 IST+0200 2017-01-01 02:00:00 IST+0200
# Asia/Kabul 2017-03-23 04:30:00 AFT+0430 2017-01-01 04:30:00 AFT+0430
# Asia/Karachi 2017-03-23 05:00:00 PKT+0500 2017-01-01 05:00:00 PKT+0500
# Asia/Kathmandu 2017-03-23 05:45:00 NPT+0545 2017-01-01 05:45:00 NPT+0545
# Asia/Krasnoyarsk 2017-03-23 07:00:00 +07+0700 2017-01-01 07:00:00 +07+0700
# Asia/Magadan 2017-03-23 11:00:00 +11+1100 2017-01-01 11:00:00 +11+1100
# Asia/Muscat 2017-03-23 04:00:00 GST+0400 2017-01-01 04:00:00 GST+0400
# Asia/Novosibirsk 2017-03-23 07:00:00 +07+0700 2017-01-01 07:00:00 +07+0700
# Asia/Riyadh 2017-03-23 03:00:00 AST+0300 2017-01-01 03:00:00 AST+0300
# Asia/Seoul 2017-03-23 09:00:00 KST+0900 2017-01-01 09:00:00 KST+0900
# Asia/Shanghai 2017-03-23 08:00:00 CST+0800 2017-01-01 08:00:00 CST+0800
# Asia/Singapore 2017-03-23 08:00:00 SGT+0800 2017-01-01 08:00:00 SGT+0800
# Asia/Taipei 2017-03-23 08:00:00 CST+0800 2017-01-01 08:00:00 CST+0800
# Asia/Tehran 2017-03-23 04:30:00 IRDT+0430 2017-01-01 03:30:00 IRST+0330
# Asia/Tokyo 2017-03-23 09:00:00 JST+0900 2017-01-01 09:00:00 JST+0900
# Asia/Ulaanbaatar 2017-03-23 08:00:00 ULAT+0800 2017-01-01 08:00:00 ULAT+0800
# Asia/Vladivostok 2017-03-23 10:00:00 +10+1000 2017-01-01 10:00:00 +10+1000
# Asia/Yakutsk 2017-03-23 09:00:00 +09+0900 2017-01-01 09:00:00 +09+0900
# Asia/Yerevan 2017-03-23 04:00:00 +04+0400 2017-01-01 04:00:00 +04+0400
# Atlantic/Azores 2017-03-22 23:00:00 AZOT-0100 2016-12-31 23:00:00 AZOT-0100
# Australia/Adelaide 2017-03-23 10:30:00 ACDT+1030 2017-01-01 10:30:00 ACDT+1030
# Australia/Brisbane 2017-03-23 10:00:00 AEST+1000 2017-01-01 10:00:00 AEST+1000
# Australia/Darwin 2017-03-23 09:30:00 ACST+0930 2017-01-01 09:30:00 ACST+0930
# Australia/Hobart 2017-03-23 11:00:00 AEDT+1100 2017-01-01 11:00:00 AEDT+1100
# Australia/Perth 2017-03-23 08:00:00 AWST+0800 2017-01-01 08:00:00 AWST+0800
# Australia/Sydney 2017-03-23 11:00:00 AEDT+1100 2017-01-01 11:00:00 AEDT+1100
# Canada/Newfoundland 2017-03-22 21:30:00 NDT-0230 2016-12-31 20:30:00 NST-0330
# Canada/Saskatchewan 2017-03-22 18:00:00 CST-0600 2016-12-31 18:00:00 CST-0600
# Brazil/East 2017-03-22 21:00:00 BRT-0300 2016-12-31 22:00:00 BRST-0200
# Europe/Amsterdam 2017-03-23 01:00:00 CET+0100 2017-01-01 01:00:00 CET+0100
# Europe/Athens 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Europe/Dublin 2017-03-23 00:00:00 GMT+0000 2017-01-01 00:00:00 GMT+0000
# Europe/Helsinki 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Europe/Istanbul 2017-03-23 03:00:00 +03+0300 2017-01-01 03:00:00 +03+0300
# Europe/Kaliningrad 2017-03-23 02:00:00 EET+0200 2017-01-01 02:00:00 EET+0200
# Europe/Moscow 2017-03-23 03:00:00 MSK+0300 2017-01-01 03:00:00 MSK+0300
# Europe/Paris 2017-03-23 01:00:00 CET+0100 2017-01-01 01:00:00 CET+0100
# Europe/Prague 2017-03-23 01:00:00 CET+0100 2017-01-01 01:00:00 CET+0100
# Europe/Sarajevo 2017-03-23 01:00:00 CET+0100 2017-01-01 01:00:00 CET+0100
# Pacific/Auckland 2017-03-23 13:00:00 NZDT+1300 2017-01-01 13:00:00 NZDT+1300
# Pacific/Fiji 2017-03-23 12:00:00 FJT+1200 2017-01-01 13:00:00 FJST+1300
# Pacific/Guam 2017-03-23 10:00:00 ChST+1000 2017-01-01 10:00:00 ChST+1000
# Pacific/Honolulu 2017-03-22 14:00:00 HST-1000 2016-12-31 14:00:00 HST-1000
# Pacific/Samoa 2017-03-22 13:00:00 SST-1100 2016-12-31 13:00:00 SST-1100
# US/Alaska 2017-03-22 16:00:00 AKDT-0800 2016-12-31 15:00:00 AKST-0900
# US/Central 2017-03-22 19:00:00 CDT-0500 2016-12-31 18:00:00 CST-0600
# US/Eastern 2017-03-22 20:00:00 EDT-0400 2016-12-31 19:00:00 EST-0500
# US/East-Indiana 2017-03-22 20:00:00 EDT-0400 2016-12-31 19:00:00 EST-0500
# US/Pacific 2017-03-22 17:00:00 PDT-0700 2016-12-31 16:00:00 PST-0800
# UTC 2017-03-23 00:00:00 UTC+0000 2017-01-01 00:00:00 UTC+0000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment