def test_history_timestamp_abbreviations(): """Test timezone abbreviation support. """ abbrev = timestamp.support_abbreviations( 'CA', reset=True ) assert sorted( abbrev ) == ['ADT', 'AST', 'CDT', 'CST', 'EDT', 'EST', 'MDT', 'MST', 'NDT', 'NST', 'PDT', 'PST'] # Perform all the remaining timezone abbreviation tests relative to a known range of times, to # avoid differences in the future due to timezone changes. ts = timestamp( "2014-04-24 08:00:00 MDT" ) assert near( ts.value, 1398348000.0 ) # Try to add all of the Americas to the CA abbreviations already supported; can't be done (too # many inconsistencies) try: abbrev = timestamp.support_abbreviations( 'America' ) assert False, "Many zones should have been ambiguously abbreviated" except AmbiguousTimeZoneError as exc: assert "America/Mazatlan" in str( exc ) exclude = [ 'America/Mazatlan', 'America/Merida', 'America/Mexico_City', 'America/Monterrey', 'America/Bahia_Banderas', 'America/Cancun', 'America/Chihuahua', 'America/Havana', 'America/Santa_Isabel', 'America/Grand_Turk', 'America/Cayman', 'America/Port-au-Prince', 'America/Metlakatla', ] #print() #print( "America, w/o %r" % ( exclude )) abbrev = timestamp.support_abbreviations( 'America', exclude=exclude ) #print( sorted( abbrev )) #print( reprlib.repr( timestamp._tzabbrev )) pytz_version = tuple( map( int, pytz.__version__.split( '.' ))) if pytz_version < (2015,4): logging.warning( "pytz < 2015.4; HADT/HAST vs. HDT/HST" ) assert sorted( abbrev ) == ['ACT', 'AKDT', 'AKST', 'AMST', 'AMT', 'ART', 'BOT', 'BRST', 'BRT', 'CLST', 'CLT', 'COT', 'ECT', 'EGST', 'EGT', 'FNT', 'GFT', 'GMT', 'GYT', 'HADT', 'HAST', 'PET', 'PMDT', 'PMST', 'PYST', 'PYT', 'SRT', 'UYST', 'UYT', 'VET', 'WGST', 'WGT'] elif pytz_version < (2015,7): logging.warning( "pytz < 2015.7; had UYST" ) assert sorted( abbrev ) == ['ACT', 'AKDT', 'AKST', 'AMST', 'AMT', 'ART', 'BOT', 'BRST', 'BRT', 'CLST', 'CLT', 'COT', 'ECT', 'EGST', 'EGT', 'FNT', 'GFT', 'GMT', 'GYT', 'HDT', 'HST', 'PET', 'PMDT', 'PMST', 'PYST', 'PYT', 'SRT', 'UYST', 'UYT', 'VET', 'WGST', 'WGT'] elif pytz_version < (2017,2): assert sorted( abbrev ) == ['ACT', 'AKDT', 'AKST', 'AMST', 'AMT', 'ART', 'BOT', 'BRST', 'BRT', 'CLST', 'CLT', 'COT', 'ECT', 'EGST', 'EGT', 'FNT', 'GFT', 'GMT', 'GYT', 'HDT', 'HST', 'PET', 'PMDT', 'PMST', 'PYST', 'PYT', 'SRT', 'UYT', 'VET', 'WGST', 'WGT'] else: # As of pytz 2017.2, alot of these zones are now using time zones consistent with CA; only a few added. assert sorted( abbrev ) == ['AKDT', 'AKST', 'GMT', 'HDT', 'HST'] # We *can* add Europe/Berlin abbrev = timestamp.support_abbreviations( 'Europe/Berlin' ) assert sorted( abbrev ) == ['CEST', 'CET'] assert 'CEST' in timestamp._tzabbrev assert 'EEST' not in timestamp._tzabbrev # And all of Europe, w/o some troublesome time zones exclude = [ 'Europe/Simferopol', 'Europe/Istanbul', 'Europe/Minsk', 'Europe/Chisinau', 'Europe/Dublin' ] #print() #print( "Europe, w/o %r" % ( exclude )) abbrev = timestamp.support_abbreviations( 'Europe', exclude=exclude ) #print( sorted( abbrev )) if pytz_version < (2015,2): assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'MSK', 'SAMT', 'WEST', 'WET'] elif pytz_version < (2016,3): assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'IST', 'MSK', 'SAMT', 'WEST', 'WET'] elif pytz_version < (2016,7): assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'IST', 'MSK', 'SAMT', 'WEST', 'WET'] elif pytz_version < (2018,5): assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'IST', 'MSK', 'WEST', 'WET'] else: assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'MSK', 'WEST', 'WET'] assert 'EEST' in timestamp._tzabbrev try: timestamp.support_abbreviations( 'Asia' ) assert False, "Asia/Jerusalem IST should have mismatched Europe/Dublin IST" except AmbiguousTimeZoneError as exc: assert "Asia/Jerusalem" in str( exc ) assert near( parse_offset( '< 1:00:00.001' ), -3600.001 ) assert near( parse_offset( '<:1.001' ), -1.001 ) assert near( parse_offset( '>1:0.001' ), 60.001 ) assert near( parse_offset( '>1' ), 1 ) # While Asia is internally very inconsistent (eg. EEST), countries should be internally consisent abbrev = timestamp.support_abbreviations( 'JO', reset=True ) # Jordan #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET'] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Amman' and dst == True and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 3:00:00" abbrev = timestamp.support_abbreviations( 'IE', reset=True ) # Israel #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'GMT', 'IST' ] # Jordan, Israel and Lebanon only work if we pick a region to exclude, for one EEST definition abbrev = timestamp.support_abbreviations( ['JO', 'IE', 'LB'], exclude=[ 'Asia/Amman' ], reset=True ) #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET', 'GMT', 'IST' ] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Beirut' and dst == True and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 3:00:00" # Australia zones incompatible with a bunch of other timezone abbreviations, eg. CST; reset abbrev = timestamp.support_abbreviations( 'Australia', reset=True ) #print( sorted( abbrev )) #print( repr( timestamp._tzabbrev )) if pytz_version < (2017,2): assert sorted( abbrev ) == ['ACDT', 'ACST', 'ACWST', 'AEDT', 'AEST', 'AWST', 'LHDT', 'LHST'] z,dst,off = timestamp._tzabbrev['LHST'] assert str(z) == 'Australia/Lord_Howe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == ">10:30:00" else: assert sorted( abbrev ) == ['ACDT', 'ACST', 'AEDT', 'AEST', 'AWST'] # Ensure that non-ambiguous (DST-specific) zone abbreviations override ambiguous (no longer # relevant, as pytz >= 2014.7 no longer contains dst == None for some of the Australian zones # without DST) abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide' ], reset=True ) assert sorted( abbrev ) == [ 'ACDT', 'ACST' ] z,dst,off = timestamp._tzabbrev['ACST'] assert str(z) == 'Australia/Adelaide' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 9:30:00" abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide', 'Australia/Darwin' ], reset=True ) #print( sorted( abbrev )) #print( repr( timestamp._tzabbrev )) z,dst,off = timestamp._tzabbrev['ACST'] assert str(z) in ( 'Australia/Darwin', 'Australia/Adelaide' ) and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 9:30:00" # Check that zones with complete, permanent offset changes (not just DST) are handled. We know # that within a year of 2014-04-28, the America/Eirunepe (west Amazonas) zone had such a change # (pre pytz 2017.2, anyway...) if pytz_version < (2017,2): abbrev = timestamp.support_abbreviations( [ 'America/Eirunepe' ], at=datetime.datetime( 2014, 4, 28 ), reset=True) #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'ACT', 'AMT' ] z,dst,off = timestamp._tzabbrev['ACT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "< 5:00:00" z,dst,off = timestamp._tzabbrev['AMT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "< 4:00:00"
def test_history_timestamp_abbreviations(): """Test timezone abbreviation support. """ if not has_pytz or not got_localzone: logging.warning( "Skipping cpppo.history.timestamp abbreviation tests" ) return abbrev = timestamp.support_abbreviations( 'CA', reset=True ) assert sorted( abbrev ) == ['ADT', 'AST', 'CDT', 'CST', 'EDT', 'EST', 'MDT', 'MST', 'NDT', 'NST', 'PDT', 'PST'] # Perform all the remaining timezone abbreviation tests relative to a known range of times, to # avoid differences in the future due to timezone changes. ts = timestamp( "2014-04-24 08:00:00 MDT" ) kwds = {} try: abbrev = timestamp.support_abbreviations( 'America' ) assert False, "Many zones should have been ambiguously abbreviated" except AmbiguousTimeZoneError as exc: assert "America/Mazatlan" in str( exc ) abbrev = timestamp.support_abbreviations( 'America', exclude=['America/Mazatlan', 'America/Merida', 'America/Mexico_City', 'America/Monterrey', 'America/Bahia_Banderas', 'America/Cancun', 'America/Chihuahua', 'America/Havana', 'America/Santa_Isabel'] ) #print( sorted( abbrev )) assert sorted( abbrev ) == ['ACT', 'AKDT', 'AKST', 'AMST', 'AMT', 'ART', 'BOT', 'BRST', 'BRT', 'CLST', 'CLT', 'COT', 'ECT', 'EGST', 'EGT', 'FNT', 'GFT', 'GMT', 'GYT', 'HADT', 'HAST', 'MeST', 'PET', 'PMDT', 'PMST', 'PYST', 'PYT', 'SRT', 'UYST', 'UYT', 'VET', 'WGST', 'WGT'] abbrev = timestamp.support_abbreviations( 'Europe/Berlin' ) assert sorted( abbrev ) == ['CEST', 'CET'] assert 'CEST' in timestamp._tzabbrev assert 'EEST' not in timestamp._tzabbrev abbrev = timestamp.support_abbreviations( 'Europe', exclude=[ 'Europe/Simferopol', 'Europe/Istanbul'] ) #print( sorted( abbrev )) assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'FET', 'IST', 'MSK', 'SAMT', 'VOLT', 'WEST', 'WET'] assert 'EEST' in timestamp._tzabbrev try: timestamp.support_abbreviations( 'Asia' ) assert False, "Asia/Jerusalem IST should have mismatched Europe/Dublin IST" except AmbiguousTimeZoneError as exc: assert "Asia/Jerusalem" in str( exc ) assert near( parse_offset( '< 1:00:00.001' ), -3600.001 ) assert near( parse_offset( '<:1.001' ), -1.001 ) assert near( parse_offset( '>1:0.001' ), 60.001 ) assert near( parse_offset( '>1' ), 1 ) # While Asia is internally very inconsistent (eg. EEST), countries should be internally consisent abbrev = timestamp.support_abbreviations( 'JO', reset=True ) # Jordan #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET'] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Amman' and dst == True and format_offset( off.total_seconds(), ms=None ) == "> 3:00:00" abbrev = timestamp.support_abbreviations( 'IE', reset=True ) # Israel #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'GMT', 'IST' ] # Jordan, Israel and Lebanon only work if we pick a region to exclude, for one EEST definition abbrev = timestamp.support_abbreviations( ['JO', 'IE', 'LB'], exclude=[ 'Asia/Amman' ], reset=True ) #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET', 'GMT', 'IST' ] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Beirut' and dst == True and format_offset( off.total_seconds(), ms=None ) == "> 3:00:00" # Australia zones incompatible with a bunch of other timezone abbreviations, eg. CST; reset abbrev = timestamp.support_abbreviations( 'Australia', reset=True ) #print( sorted( abbrev )) assert sorted( abbrev ) == ['CST', 'CWST', 'EST', 'LHST', 'WST'] z,dst,off = timestamp._tzabbrev['LHST'] assert str(z) == 'Australia/Lord_Howe' and dst == None and format_offset( off.total_seconds(), ms=None ) == ">10:30:00" # Ensure that non-ambiguous (DST-specific) zone abbreviations override ambiguous abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide' ], reset=True ) z,dst,off = timestamp._tzabbrev['CST'] assert str(z) == 'Australia/Adelaide' and dst == None and format_offset( off.total_seconds(), ms=None ) == "> 9:30:00" abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide', 'Australia/Darwin' ], reset=True ) z,dst,off = timestamp._tzabbrev['CST'] assert str(z) == 'Australia/Darwin' and dst == False and format_offset( off.total_seconds(), ms=None ) == "> 9:30:00" # Check that zones with complete, permanent offset changes (not just DST) are handled. We know # that within a year of 2014-04-28, the America/Eirunepe (west Amazonas) zone had such a change. abbrev = timestamp.support_abbreviations( [ 'America/Eirunepe' ], at=datetime.datetime( 2014, 4, 28 )) assert sorted( abbrev ) == [ 'ACT', 'AMT' ] z,dst,off = timestamp._tzabbrev['ACT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( off.total_seconds(), ms=None ) == "< 5:00:00" z,dst,off = timestamp._tzabbrev['AMT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( off.total_seconds(), ms=None ) == "< 4:00:00"
def test_history_timestamp_abbreviations(): """Test timezone abbreviation support. """ abbrev = timestamp.support_abbreviations( 'CA', reset=True ) assert sorted( abbrev ) == ['ADT', 'AST', 'CDT', 'CST', 'EDT', 'EST', 'MDT', 'MST', 'NDT', 'NST', 'PDT', 'PST'] # Perform all the remaining timezone abbreviation tests relative to a known range of times, to # avoid differences in the future due to timezone changes. ts = timestamp( "2014-04-24 08:00:00 MDT" ) assert near( ts.value, 1398348000.0 ) try: abbrev = timestamp.support_abbreviations( 'America' ) assert False, "Many zones should have been ambiguously abbreviated" except AmbiguousTimeZoneError as exc: assert "America/Mazatlan" in str( exc ) abbrev = timestamp.support_abbreviations( 'America', exclude=['America/Mazatlan', 'America/Merida', 'America/Mexico_City', 'America/Monterrey', 'America/Bahia_Banderas', 'America/Cancun', 'America/Chihuahua', 'America/Havana', 'America/Santa_Isabel', 'America/Grand_Turk'] ) #print( sorted( abbrev )) #print( reprlib.repr( timestamp._tzabbrev )) assert sorted( abbrev ) == ['ACT', 'AKDT', 'AKST', 'AMST', 'AMT', 'ART', 'BOT', 'BRST', 'BRT', 'CLST', 'CLT', 'COT', 'ECT', 'EGST', 'EGT', 'FNT', 'GFT', 'GMT', 'GYT', 'HADT', 'HAST', 'PET', 'PMDT', 'PMST', 'PYST', 'PYT', 'SRT', 'UYST', 'UYT', 'VET', 'WGST', 'WGT'] abbrev = timestamp.support_abbreviations( 'Europe/Berlin' ) assert sorted( abbrev ) == ['CEST', 'CET'] assert 'CEST' in timestamp._tzabbrev assert 'EEST' not in timestamp._tzabbrev abbrev = timestamp.support_abbreviations( 'Europe', exclude=[ 'Europe/Simferopol', 'Europe/Istanbul', 'Europe/Minsk' ] ) #print( sorted( abbrev )) assert sorted( abbrev ) == ['BST', 'EEST', 'EET', 'FET', 'IST', 'MSK', 'SAMT', 'WEST', 'WET'] assert 'EEST' in timestamp._tzabbrev try: timestamp.support_abbreviations( 'Asia' ) assert False, "Asia/Jerusalem IST should have mismatched Europe/Dublin IST" except AmbiguousTimeZoneError as exc: assert "Asia/Jerusalem" in str( exc ) assert near( parse_offset( '< 1:00:00.001' ), -3600.001 ) assert near( parse_offset( '<:1.001' ), -1.001 ) assert near( parse_offset( '>1:0.001' ), 60.001 ) assert near( parse_offset( '>1' ), 1 ) # While Asia is internally very inconsistent (eg. EEST), countries should be internally consisent abbrev = timestamp.support_abbreviations( 'JO', reset=True ) # Jordan #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET'] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Amman' and dst == True and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 3:00:00" abbrev = timestamp.support_abbreviations( 'IE', reset=True ) # Israel #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'GMT', 'IST' ] # Jordan, Israel and Lebanon only work if we pick a region to exclude, for one EEST definition abbrev = timestamp.support_abbreviations( ['JO', 'IE', 'LB'], exclude=[ 'Asia/Amman' ], reset=True ) #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'EEST', 'EET', 'GMT', 'IST' ] z,dst,off = timestamp._tzabbrev['EEST'] assert str(z) == 'Asia/Beirut' and dst == True and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 3:00:00" # Australia zones incompatible with a bunch of other timezone abbreviations, eg. CST; reset abbrev = timestamp.support_abbreviations( 'Australia', reset=True ) #print( sorted( abbrev )) #print( repr( timestamp._tzabbrev )) assert sorted( abbrev ) == ['ACDT', 'ACST', 'ACWST', 'AEDT', 'AEST', 'AWST', 'LHDT', 'LHST'] z,dst,off = timestamp._tzabbrev['LHST'] assert str(z) == 'Australia/Lord_Howe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == ">10:30:00" # Ensure that non-ambiguous (DST-specific) zone abbreviations override ambiguous (no longer # relevant, as pytz >= 2014.7 no longer contains dst == None for some of the Australian zones # without DST) abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide' ], reset=True ) #print( sorted( abbrev )) # ['ACDT', 'ACST'] z,dst,off = timestamp._tzabbrev['ACST'] assert str(z) == 'Australia/Adelaide' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 9:30:00" abbrev = timestamp.support_abbreviations( [ 'Australia/Adelaide', 'Australia/Darwin' ], reset=True ) #print( sorted( abbrev )) #print( repr( timestamp._tzabbrev )) z,dst,off = timestamp._tzabbrev['ACST'] assert str(z) in ( 'Australia/Darwin', 'Australia/Adelaide' ) and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "> 9:30:00" # Check that zones with complete, permanent offset changes (not just DST) are handled. We know # that within a year of 2014-04-28, the America/Eirunepe (west Amazonas) zone had such a change. abbrev = timestamp.support_abbreviations( [ 'America/Eirunepe' ], at=datetime.datetime( 2014, 4, 28 )) #print( sorted( abbrev )) assert sorted( abbrev ) == [ 'ACT', 'AMT' ] z,dst,off = timestamp._tzabbrev['ACT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "< 5:00:00" z,dst,off = timestamp._tzabbrev['AMT'] assert str(z) == 'America/Eirunepe' and dst == False and format_offset( timedelta_total_seconds( off ), ms=None ) == "< 4:00:00"
def test_history_timestamp_abbreviations(): """Test timezone abbreviation support. """ abbrev = timestamp.support_abbreviations("CA", reset=True) assert sorted(abbrev) == ["ADT", "AST", "CDT", "CST", "EDT", "EST", "MDT", "MST", "NDT", "NST", "PDT", "PST"] # Perform all the remaining timezone abbreviation tests relative to a known range of times, to # avoid differences in the future due to timezone changes. ts = timestamp("2014-04-24 08:00:00 MDT") assert near(ts.value, 1398348000.0) try: abbrev = timestamp.support_abbreviations("America") assert False, "Many zones should have been ambiguously abbreviated" except AmbiguousTimeZoneError as exc: assert "America/Mazatlan" in str(exc) abbrev = timestamp.support_abbreviations( "America", exclude=[ "America/Mazatlan", "America/Merida", "America/Mexico_City", "America/Monterrey", "America/Bahia_Banderas", "America/Cancun", "America/Chihuahua", "America/Havana", "America/Santa_Isabel", "America/Grand_Turk", "America/Cayman", ], ) # print( sorted( abbrev )) # print( reprlib.repr( timestamp._tzabbrev )) if tuple(map(int, pytz.__version__.split("."))) < (2015, 4): logging.warning("pytz < 2015.4; HADT/HAST vs. HDT/HST") assert sorted(abbrev) == [ "ACT", "AKDT", "AKST", "AMST", "AMT", "ART", "BOT", "BRST", "BRT", "CLST", "CLT", "COT", "ECT", "EGST", "EGT", "FNT", "GFT", "GMT", "GYT", "HADT", "HAST", "PET", "PMDT", "PMST", "PYST", "PYT", "SRT", "UYST", "UYT", "VET", "WGST", "WGT", ] else: assert sorted(abbrev) == [ "ACT", "AKDT", "AKST", "AMST", "AMT", "ART", "BOT", "BRST", "BRT", "CLST", "CLT", "COT", "ECT", "EGST", "EGT", "FNT", "GFT", "GMT", "GYT", "HDT", "HST", "PET", "PMDT", "PMST", "PYST", "PYT", "SRT", "UYST", "UYT", "VET", "WGST", "WGT", ] abbrev = timestamp.support_abbreviations("Europe/Berlin") assert sorted(abbrev) == ["CEST", "CET"] assert "CEST" in timestamp._tzabbrev assert "EEST" not in timestamp._tzabbrev abbrev = timestamp.support_abbreviations( "Europe", exclude=["Europe/Simferopol", "Europe/Istanbul", "Europe/Minsk", "Europe/Chisinau"] ) # print( sorted( abbrev )) assert sorted(abbrev) == ["BST", "EEST", "EET", "IST", "MSK", "SAMT", "WEST", "WET"] assert "EEST" in timestamp._tzabbrev try: timestamp.support_abbreviations("Asia") assert False, "Asia/Jerusalem IST should have mismatched Europe/Dublin IST" except AmbiguousTimeZoneError as exc: assert "Asia/Jerusalem" in str(exc) assert near(parse_offset("< 1:00:00.001"), -3600.001) assert near(parse_offset("<:1.001"), -1.001) assert near(parse_offset(">1:0.001"), 60.001) assert near(parse_offset(">1"), 1) # While Asia is internally very inconsistent (eg. EEST), countries should be internally consisent abbrev = timestamp.support_abbreviations("JO", reset=True) # Jordan # print( sorted( abbrev )) assert sorted(abbrev) == ["EEST", "EET"] z, dst, off = timestamp._tzabbrev["EEST"] assert ( str(z) == "Asia/Amman" and dst == True and format_offset(timedelta_total_seconds(off), ms=None) == "> 3:00:00" ) abbrev = timestamp.support_abbreviations("IE", reset=True) # Israel # print( sorted( abbrev )) assert sorted(abbrev) == ["GMT", "IST"] # Jordan, Israel and Lebanon only work if we pick a region to exclude, for one EEST definition abbrev = timestamp.support_abbreviations(["JO", "IE", "LB"], exclude=["Asia/Amman"], reset=True) # print( sorted( abbrev )) assert sorted(abbrev) == ["EEST", "EET", "GMT", "IST"] z, dst, off = timestamp._tzabbrev["EEST"] assert ( str(z) == "Asia/Beirut" and dst == True and format_offset(timedelta_total_seconds(off), ms=None) == "> 3:00:00" ) # Australia zones incompatible with a bunch of other timezone abbreviations, eg. CST; reset abbrev = timestamp.support_abbreviations("Australia", reset=True) # print( sorted( abbrev )) # print( repr( timestamp._tzabbrev )) assert sorted(abbrev) == ["ACDT", "ACST", "ACWST", "AEDT", "AEST", "AWST", "LHDT", "LHST"] z, dst, off = timestamp._tzabbrev["LHST"] assert ( str(z) == "Australia/Lord_Howe" and dst == False and format_offset(timedelta_total_seconds(off), ms=None) == ">10:30:00" ) # Ensure that non-ambiguous (DST-specific) zone abbreviations override ambiguous (no longer # relevant, as pytz >= 2014.7 no longer contains dst == None for some of the Australian zones # without DST) abbrev = timestamp.support_abbreviations(["Australia/Adelaide"], reset=True) # print( sorted( abbrev )) # ['ACDT', 'ACST'] z, dst, off = timestamp._tzabbrev["ACST"] assert ( str(z) == "Australia/Adelaide" and dst == False and format_offset(timedelta_total_seconds(off), ms=None) == "> 9:30:00" ) abbrev = timestamp.support_abbreviations(["Australia/Adelaide", "Australia/Darwin"], reset=True) # print( sorted( abbrev )) # print( repr( timestamp._tzabbrev )) z, dst, off = timestamp._tzabbrev["ACST"] assert ( str(z) in ("Australia/Darwin", "Australia/Adelaide") and dst == False and format_offset(timedelta_total_seconds(off), ms=None) == "> 9:30:00" ) # Check that zones with complete, permanent offset changes (not just DST) are handled. We know # that within a year of 2014-04-28, the America/Eirunepe (west Amazonas) zone had such a change. abbrev = timestamp.support_abbreviations(["America/Eirunepe"], at=datetime.datetime(2014, 4, 28)) # print( sorted( abbrev )) assert sorted(abbrev) == ["ACT", "AMT"] z, dst, off = timestamp._tzabbrev["ACT"] assert ( str(z) == "America/Eirunepe" and dst == False and format_offset(timedelta_total_seconds(off), ms=None) == "< 5:00:00" ) z, dst, off = timestamp._tzabbrev["AMT"] assert ( str(z) == "America/Eirunepe" and dst == False and format_offset(timedelta_total_seconds(off), ms=None) == "< 4:00:00" )