Java: retrieve locale and timezone from request

If you thought it’s no problem to retrive the users timezone from a http request you are wrong.

You get the locale but not the timezone and if you try to create the timzone from this locale you will get the default timezone from the server.

Currently there are two ways to get the timezone:

  1. expensive geolocation service like http://www.ip2location.com/
  2. javascript as discribed at http://www.onlineaspect.com/

I don’t like both solutions, therefore i created a third one by mapping the locales to timzones. This solution doesn’t work for countries with more than one timezone but thats ok for my requirements.

idcodelanguagecountrycapitaltimezone
1ja_JPJapaneseJapanTokyoAsia/Tokyo
2es_PESpanishPeruLimaAmerica/Lima
3enEnglishUnited StatesWashingtonAmerica/Los_Angeles
4ja_JPJapaneseJapanTokyoAsia/Tokyo
5es_PASpanishPanamaPanama CityAmerica/Panama
6sr_BASerbianBosnia and HerzegovinaSarajevoEurope/Sarajevo
7mkMacedonianMacedoniaSkopjeEurope/Skopje
8es_GTSpanishGuatemalaGuatemala CityAmerica/Guatemala
9ar_AEArabicUnited Arab EmiratesAbu DhabiAsia/Dubai
10no_NONorwegianNorwayOsloEurope/Oslo
11sq_ALAlbanianAlbaniaTiraneEurope/Tirane
12bgBulgarianBulgariaSofiaEurope/Sofia
13ar_IQArabicIraqBaghdadAsia/Baghdad
14ar_YEArabicYemenSanaaAsia/Qatar
15huHungarianHungaryBudapestEurope/Budapest
16pt_PTPortuguesePortugalLisbonEurope/Lisbon
17el_CYGreekCyprusNicosiaAsia/Nicosia
18ar_QAArabicQatarDohaAsia/Qatar
19mk_MKMacedonianMacedoniaSkopjeEurope/Skopje
20svSwedishSwedenStockholmEurope/Stockholm
21de_CHGermanSwitzerlandBernEurope/Zurich
22en_USEnglishUnited StatesWashingtonAmerica/Los_Angeles
23fi_FIFinnishFinlandHelsinkiEurope/Helsinki
24isIcelandicIcelandReykjavikAtlantic/Reykjavik
25csCzechCzech RepublicPragueEurope/Prague
26en_MTEnglishMaltaVallettaEurope/Malta
27sl_SISlovenianSloveniaLjubljanaEurope/Ljubljana
28sk_SKSlovakSlovakiaBratislavaEurope/Bratislava
29itItalianItalyRomeEurope/Rome
30tr_TRTurkishTurkeyAnkaraEurope/Istanbul
31zhChineseTaiwanTaipeiAsia/Taipei
32thThaiThailandBangkokAsia/Bangkok
33ar_SAArabicSaudi ArabiaRiyadhAsia/Riyadh
34noNorwegianNorwayOsloEurope/Oslo
35en_GBEnglishUnited KingdomLondonEurope/London
36sr_CSSerbianSerbia and MontenegroBelgradeEurope/Belgrade
37ltLithuanianLithuaniaVilniusEurope/Vilnius
38roRomanianRomaniaBucharestEurope/Bucharest
39en_NZEnglishNew ZealandWellingtonPacific/Auckland
40no_NONorwegianNorwayOsloEurope/Oslo
41lt_LTLithuanianLithuaniaVilniusEurope/Vilnius
42es_NISpanishNicaraguaManaguaAmerica/Managua
43nlDutchNetherlandsAmsterdamEurope/Amsterdam
44ga_IEIrishIrelandDublinEurope/Dublin
45fr_BEFrenchBelgiumBrusselsEurope/Brussels
46es_ESSpanishSpainMadridEurope/Madrid
47ar_LBArabicLebanonBeirutAsia/Beirut
48koKoreanSouth KoreaSeoulAsia/Seoul
49fr_CAFrenchCanadaOttawaAmerica/Montreal
50et_EEEstonianEstoniaTallinnEurope/Tallinn
51ar_KWArabicKuwaitKuwait CityAsia/Kuwait
52sr_RSSerbianSerbiaBelgradeEurope/Belgrade
53es_USSpanishUnited StatesLondonEurope/London
54es_MXSpanishMexicoMexico CityAmerica/Mexico_City
55ar_SDArabicSudanKhartoumAfrica/Khartoum
56in_IDIndonesianIndonesiaJakartaAsia/Jakarta
57ruRussianRussiaMoscowEurope/Moscow
58lvLatvianLatviaRigaEurope/Riga
59es_UYSpanishUruguayMontevideoAmerica/Montevideo
60lv_LVLatvianLatviaRigaEurope/Riga
61iwHebrewIsraelJerusalem*Asia/Jerusalem
62pt_BRPortugueseBrazilBrasiliaAmerica/Sao_Paulo
63ar_SYArabicSyriaDamascusAsia/Damascus
64hrCroatianCroatiaZagrebEurope/Zagreb
65etEstonianEstoniaTallinnEurope/Tallinn
66es_DOSpanishDominican RepublicSanto DomingoAmerica/Santo_Domingo
67fr_CHFrenchSwitzerlandBernEurope/Zurich
68hi_INHindiIndiaNew DelhiAsia/Calcutta
69es_VESpanishVenezuelaCaracasAmerica/Caracas
70ar_BHArabicBahrainManamaAsia/Bahrain
71en_PHEnglishPhilippinesManilaAsia/Manila
72ar_TNArabicTunisiaTunisAfrica/Tunis
73fiFinnishFinlandHelsinkiEurope/Helsinki
74de_ATGermanAustriaViennaEurope/Vienna
75esSpanishPeruLimaAmerica/Lima
76nl_NLDutchNetherlandsAmsterdamEurope/Amsterdam
77es_ECSpanishEcuadorQuitoAmerica/Guayaquil
78zh_TWChineseTaiwanTaipeiAsia/Taipei
79ar_JOArabicJordanAmmanAsia/Amman
80beBelarusianBelarusMinskEurope/Minsk
81is_ISIcelandicIcelandReykjavikAtlantic/Reykjavik
82es_COSpanishColombiaBogotaAmerica/Bogota
83es_CRSpanishCosta RicaSan JoseAmerica/Costa_Rica
84es_CLSpanishChileSantiagoAmerica/Santiago
85ar_EGArabicEgyptCairoAfrica/Cairo
86en_ZAEnglishSouth AfricaPretoriaAfrica/Johannesburg
87th_THThaiThailandBangkokAsia/Bangkok
88el_GRGreekGreeceAthensEurope/Athens
89it_ITItalianItalyRomeEurope/Rome
90caCatalanSpainMadridEurope/Madrid
91hu_HUHungarianHungaryBudapestEurope/Budapest
92frFrenchBelgiumBrusselsEurope/Brussels
93en_IEEnglishIrelandDublinEurope/Dublin
94uk_UAUkrainianUkraineKyivEurope/Kiev
95pl_PLPolishPolandWarsawEurope/Warsaw
96fr_LUFrenchLuxembourgLuxembourgEurope/Luxembourg
97nl_BEDutchBelgiumBrusselsEurope/Brussels
98en_INEnglishIndiaNew DelhiAsia/Calcutta
99ca_ESCatalanSpainMadridEurope/Madrid
100ar_MAArabicMoroccoRabatAfrica/Casablanca
101es_BOSpanishBoliviaLa PazAmerica/La_Paz
102en_AUEnglishAustraliaCanberraAustralia/Canberra
103srSerbianBosnia and HerzegovinaSarajevoEurope/Sarajevo
104zh_SGChineseSingaporeSingaporeAsia/Singapore
105ptPortuguesePortugalLisbonEurope/Lisbon
106ukUkrainianUkraineKyivEurope/Kiev
107es_SVSpanishEl SalvadorSan SalvadorAmerica/El_Salvador
108ru_RURussianRussiaMoscowEurope/Moscow
109ko_KRKoreanSouth KoreaSeoulAsia/Seoul
110viVietnameseVietnamHanoiAsia/Ho_Chi_Minh
111ar_DZArabicAlgeriaAlgiersAfrica/Algiers
112vi_VNVietnameseVietnamHanoiAsia/Ho_Chi_Minh
113sr_MESerbianMontenegroPodgoricaEurope/Podgorica
114sqAlbanianAlbaniaTiraneEurope/Tirane
115ar_LYArabicLibyaTripoliAfrica/Tripoli
116arArabicUnited Arab EmiratesAbu DhabiAsia/Dubai
117zh_CNChineseChinaBeijingAsia/Shanghai
118be_BYBelarusianBelarusMinskEurope/Minsk
119zh_HKChineseHong KongHong KongAsia/Hong_Kong
120jaJapaneseJapanTokyoAsia/Tokyo
121iw_ILHebrewIsraelJerusalem*Asia/Jerusalem
122bg_BGBulgarianBulgariaSofiaEurope/Sofia
123inIndonesianIndonesiaJakartaAsia/Jakarta
124mt_MTMalteseMaltaVallettaEurope/Malta
125es_PYSpanishParaguayAsuncionAmerica/Asuncion
126slSlovenianSloveniaLjubljanaEurope/Ljubljana
127fr_FRFrenchFranceParisEurope/Paris
128cs_CZCzechCzech RepublicPragueEurope/Prague
129it_CHItalianSwitzerlandBernEurope/Zurich
130ro_RORomanianRomaniaBucharestEurope/Bucharest
131es_PRSpanishPuerto RicoSan JuanAmerica/Argentina/San_Juan
132en_CAEnglishCanadaOttawaAmerica/Montreal
133de_DEGermanGermanyBerlinEurope/Berlin
134gaIrishIrelandDublinEurope/Dublin
135de_LUGermanLuxembourgLuxembourgEurope/Luxembourg
136deGermanSwitzerlandBernEurope/Zurich
137es_ARSpanishArgentinaBuenos AiresAmerica/Argentina/Buenos_Aires
138skSlovakSlovakiaBratislavaEurope/Bratislava
139ms_MYMalayMalaysiaKuala LumpurAsia/Kuala_Lumpur
140hr_HRCroatianCroatiaZagrebEurope/Zagreb
141en_SGEnglishSingaporeSingaporeAsia/Singapore
142daDanishDenmarkCopenhagenEurope/Copenhagen
143mtMalteseMaltaVallettaEurope/Malta
144plPolishPolandWarsawEurope/Warsaw
145ar_OMArabicOmanMuscatAsia/Muscat
146trTurkishTurkeyAnkaraEurope/Istanbul
147th_THThaiThailandBangkokAsia/Bangkok
148elGreekCyprusNicosiaAsia/Nicosia
149msMalayMalaysiaKuala LumpurAsia/Kuala_Lumpur
150sv_SESwedishSwedenStockholmEurope/Stockholm
151da_DKDanishDenmarkCopenhagenEurope/Copenhagen
152es_HNSpanishHondurasTegucigalpaAmerica/Tegucigalpa

posted in Development by david

Follow comments via the RSS Feed | Einen Kommentar hinterlassen | Trackback URL

2 Comments to "Java: retrieve locale and timezone from request"

  1. Jimmy Dean wrote:

    You might want to double check your locale/timezone graph. It currently says the capital of the United States is London.

  2. david wrote:

    Thanks Jimmy, fixed it.

Leave Your Comment