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:
- expensive geolocation service like http://www.ip2location.com/
- 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.
| id | code | language | country | capital | timezone |
|---|---|---|---|---|---|
| 1 | ja_JP | Japanese | Japan | Tokyo | Asia/Tokyo |
| 2 | es_PE | Spanish | Peru | Lima | America/Lima |
| 3 | en | English | United States | Washington | America/Los_Angeles |
| 4 | ja_JP | Japanese | Japan | Tokyo | Asia/Tokyo |
| 5 | es_PA | Spanish | Panama | Panama City | America/Panama |
| 6 | sr_BA | Serbian | Bosnia and Herzegovina | Sarajevo | Europe/Sarajevo |
| 7 | mk | Macedonian | Macedonia | Skopje | Europe/Skopje |
| 8 | es_GT | Spanish | Guatemala | Guatemala City | America/Guatemala |
| 9 | ar_AE | Arabic | United Arab Emirates | Abu Dhabi | Asia/Dubai |
| 10 | no_NO | Norwegian | Norway | Oslo | Europe/Oslo |
| 11 | sq_AL | Albanian | Albania | Tirane | Europe/Tirane |
| 12 | bg | Bulgarian | Bulgaria | Sofia | Europe/Sofia |
| 13 | ar_IQ | Arabic | Iraq | Baghdad | Asia/Baghdad |
| 14 | ar_YE | Arabic | Yemen | Sanaa | Asia/Qatar |
| 15 | hu | Hungarian | Hungary | Budapest | Europe/Budapest |
| 16 | pt_PT | Portuguese | Portugal | Lisbon | Europe/Lisbon |
| 17 | el_CY | Greek | Cyprus | Nicosia | Asia/Nicosia |
| 18 | ar_QA | Arabic | Qatar | Doha | Asia/Qatar |
| 19 | mk_MK | Macedonian | Macedonia | Skopje | Europe/Skopje |
| 20 | sv | Swedish | Sweden | Stockholm | Europe/Stockholm |
| 21 | de_CH | German | Switzerland | Bern | Europe/Zurich |
| 22 | en_US | English | United States | Washington | America/Los_Angeles |
| 23 | fi_FI | Finnish | Finland | Helsinki | Europe/Helsinki |
| 24 | is | Icelandic | Iceland | Reykjavik | Atlantic/Reykjavik |
| 25 | cs | Czech | Czech Republic | Prague | Europe/Prague |
| 26 | en_MT | English | Malta | Valletta | Europe/Malta |
| 27 | sl_SI | Slovenian | Slovenia | Ljubljana | Europe/Ljubljana |
| 28 | sk_SK | Slovak | Slovakia | Bratislava | Europe/Bratislava |
| 29 | it | Italian | Italy | Rome | Europe/Rome |
| 30 | tr_TR | Turkish | Turkey | Ankara | Europe/Istanbul |
| 31 | zh | Chinese | Taiwan | Taipei | Asia/Taipei |
| 32 | th | Thai | Thailand | Bangkok | Asia/Bangkok |
| 33 | ar_SA | Arabic | Saudi Arabia | Riyadh | Asia/Riyadh |
| 34 | no | Norwegian | Norway | Oslo | Europe/Oslo |
| 35 | en_GB | English | United Kingdom | London | Europe/London |
| 36 | sr_CS | Serbian | Serbia and Montenegro | Belgrade | Europe/Belgrade |
| 37 | lt | Lithuanian | Lithuania | Vilnius | Europe/Vilnius |
| 38 | ro | Romanian | Romania | Bucharest | Europe/Bucharest |
| 39 | en_NZ | English | New Zealand | Wellington | Pacific/Auckland |
| 40 | no_NO | Norwegian | Norway | Oslo | Europe/Oslo |
| 41 | lt_LT | Lithuanian | Lithuania | Vilnius | Europe/Vilnius |
| 42 | es_NI | Spanish | Nicaragua | Managua | America/Managua |
| 43 | nl | Dutch | Netherlands | Amsterdam | Europe/Amsterdam |
| 44 | ga_IE | Irish | Ireland | Dublin | Europe/Dublin |
| 45 | fr_BE | French | Belgium | Brussels | Europe/Brussels |
| 46 | es_ES | Spanish | Spain | Madrid | Europe/Madrid |
| 47 | ar_LB | Arabic | Lebanon | Beirut | Asia/Beirut |
| 48 | ko | Korean | South Korea | Seoul | Asia/Seoul |
| 49 | fr_CA | French | Canada | Ottawa | America/Montreal |
| 50 | et_EE | Estonian | Estonia | Tallinn | Europe/Tallinn |
| 51 | ar_KW | Arabic | Kuwait | Kuwait City | Asia/Kuwait |
| 52 | sr_RS | Serbian | Serbia | Belgrade | Europe/Belgrade |
| 53 | es_US | Spanish | United States | London | Europe/London |
| 54 | es_MX | Spanish | Mexico | Mexico City | America/Mexico_City |
| 55 | ar_SD | Arabic | Sudan | Khartoum | Africa/Khartoum |
| 56 | in_ID | Indonesian | Indonesia | Jakarta | Asia/Jakarta |
| 57 | ru | Russian | Russia | Moscow | Europe/Moscow |
| 58 | lv | Latvian | Latvia | Riga | Europe/Riga |
| 59 | es_UY | Spanish | Uruguay | Montevideo | America/Montevideo |
| 60 | lv_LV | Latvian | Latvia | Riga | Europe/Riga |
| 61 | iw | Hebrew | Israel | Jerusalem* | Asia/Jerusalem |
| 62 | pt_BR | Portuguese | Brazil | Brasilia | America/Sao_Paulo |
| 63 | ar_SY | Arabic | Syria | Damascus | Asia/Damascus |
| 64 | hr | Croatian | Croatia | Zagreb | Europe/Zagreb |
| 65 | et | Estonian | Estonia | Tallinn | Europe/Tallinn |
| 66 | es_DO | Spanish | Dominican Republic | Santo Domingo | America/Santo_Domingo |
| 67 | fr_CH | French | Switzerland | Bern | Europe/Zurich |
| 68 | hi_IN | Hindi | India | New Delhi | Asia/Calcutta |
| 69 | es_VE | Spanish | Venezuela | Caracas | America/Caracas |
| 70 | ar_BH | Arabic | Bahrain | Manama | Asia/Bahrain |
| 71 | en_PH | English | Philippines | Manila | Asia/Manila |
| 72 | ar_TN | Arabic | Tunisia | Tunis | Africa/Tunis |
| 73 | fi | Finnish | Finland | Helsinki | Europe/Helsinki |
| 74 | de_AT | German | Austria | Vienna | Europe/Vienna |
| 75 | es | Spanish | Peru | Lima | America/Lima |
| 76 | nl_NL | Dutch | Netherlands | Amsterdam | Europe/Amsterdam |
| 77 | es_EC | Spanish | Ecuador | Quito | America/Guayaquil |
| 78 | zh_TW | Chinese | Taiwan | Taipei | Asia/Taipei |
| 79 | ar_JO | Arabic | Jordan | Amman | Asia/Amman |
| 80 | be | Belarusian | Belarus | Minsk | Europe/Minsk |
| 81 | is_IS | Icelandic | Iceland | Reykjavik | Atlantic/Reykjavik |
| 82 | es_CO | Spanish | Colombia | Bogota | America/Bogota |
| 83 | es_CR | Spanish | Costa Rica | San Jose | America/Costa_Rica |
| 84 | es_CL | Spanish | Chile | Santiago | America/Santiago |
| 85 | ar_EG | Arabic | Egypt | Cairo | Africa/Cairo |
| 86 | en_ZA | English | South Africa | Pretoria | Africa/Johannesburg |
| 87 | th_TH | Thai | Thailand | Bangkok | Asia/Bangkok |
| 88 | el_GR | Greek | Greece | Athens | Europe/Athens |
| 89 | it_IT | Italian | Italy | Rome | Europe/Rome |
| 90 | ca | Catalan | Spain | Madrid | Europe/Madrid |
| 91 | hu_HU | Hungarian | Hungary | Budapest | Europe/Budapest |
| 92 | fr | French | Belgium | Brussels | Europe/Brussels |
| 93 | en_IE | English | Ireland | Dublin | Europe/Dublin |
| 94 | uk_UA | Ukrainian | Ukraine | Kyiv | Europe/Kiev |
| 95 | pl_PL | Polish | Poland | Warsaw | Europe/Warsaw |
| 96 | fr_LU | French | Luxembourg | Luxembourg | Europe/Luxembourg |
| 97 | nl_BE | Dutch | Belgium | Brussels | Europe/Brussels |
| 98 | en_IN | English | India | New Delhi | Asia/Calcutta |
| 99 | ca_ES | Catalan | Spain | Madrid | Europe/Madrid |
| 100 | ar_MA | Arabic | Morocco | Rabat | Africa/Casablanca |
| 101 | es_BO | Spanish | Bolivia | La Paz | America/La_Paz |
| 102 | en_AU | English | Australia | Canberra | Australia/Canberra |
| 103 | sr | Serbian | Bosnia and Herzegovina | Sarajevo | Europe/Sarajevo |
| 104 | zh_SG | Chinese | Singapore | Singapore | Asia/Singapore |
| 105 | pt | Portuguese | Portugal | Lisbon | Europe/Lisbon |
| 106 | uk | Ukrainian | Ukraine | Kyiv | Europe/Kiev |
| 107 | es_SV | Spanish | El Salvador | San Salvador | America/El_Salvador |
| 108 | ru_RU | Russian | Russia | Moscow | Europe/Moscow |
| 109 | ko_KR | Korean | South Korea | Seoul | Asia/Seoul |
| 110 | vi | Vietnamese | Vietnam | Hanoi | Asia/Ho_Chi_Minh |
| 111 | ar_DZ | Arabic | Algeria | Algiers | Africa/Algiers |
| 112 | vi_VN | Vietnamese | Vietnam | Hanoi | Asia/Ho_Chi_Minh |
| 113 | sr_ME | Serbian | Montenegro | Podgorica | Europe/Podgorica |
| 114 | sq | Albanian | Albania | Tirane | Europe/Tirane |
| 115 | ar_LY | Arabic | Libya | Tripoli | Africa/Tripoli |
| 116 | ar | Arabic | United Arab Emirates | Abu Dhabi | Asia/Dubai |
| 117 | zh_CN | Chinese | China | Beijing | Asia/Shanghai |
| 118 | be_BY | Belarusian | Belarus | Minsk | Europe/Minsk |
| 119 | zh_HK | Chinese | Hong Kong | Hong Kong | Asia/Hong_Kong |
| 120 | ja | Japanese | Japan | Tokyo | Asia/Tokyo |
| 121 | iw_IL | Hebrew | Israel | Jerusalem* | Asia/Jerusalem |
| 122 | bg_BG | Bulgarian | Bulgaria | Sofia | Europe/Sofia |
| 123 | in | Indonesian | Indonesia | Jakarta | Asia/Jakarta |
| 124 | mt_MT | Maltese | Malta | Valletta | Europe/Malta |
| 125 | es_PY | Spanish | Paraguay | Asuncion | America/Asuncion |
| 126 | sl | Slovenian | Slovenia | Ljubljana | Europe/Ljubljana |
| 127 | fr_FR | French | France | Paris | Europe/Paris |
| 128 | cs_CZ | Czech | Czech Republic | Prague | Europe/Prague |
| 129 | it_CH | Italian | Switzerland | Bern | Europe/Zurich |
| 130 | ro_RO | Romanian | Romania | Bucharest | Europe/Bucharest |
| 131 | es_PR | Spanish | Puerto Rico | San Juan | America/Argentina/San_Juan |
| 132 | en_CA | English | Canada | Ottawa | America/Montreal |
| 133 | de_DE | German | Germany | Berlin | Europe/Berlin |
| 134 | ga | Irish | Ireland | Dublin | Europe/Dublin |
| 135 | de_LU | German | Luxembourg | Luxembourg | Europe/Luxembourg |
| 136 | de | German | Switzerland | Bern | Europe/Zurich |
| 137 | es_AR | Spanish | Argentina | Buenos Aires | America/Argentina/Buenos_Aires |
| 138 | sk | Slovak | Slovakia | Bratislava | Europe/Bratislava |
| 139 | ms_MY | Malay | Malaysia | Kuala Lumpur | Asia/Kuala_Lumpur |
| 140 | hr_HR | Croatian | Croatia | Zagreb | Europe/Zagreb |
| 141 | en_SG | English | Singapore | Singapore | Asia/Singapore |
| 142 | da | Danish | Denmark | Copenhagen | Europe/Copenhagen |
| 143 | mt | Maltese | Malta | Valletta | Europe/Malta |
| 144 | pl | Polish | Poland | Warsaw | Europe/Warsaw |
| 145 | ar_OM | Arabic | Oman | Muscat | Asia/Muscat |
| 146 | tr | Turkish | Turkey | Ankara | Europe/Istanbul |
| 147 | th_TH | Thai | Thailand | Bangkok | Asia/Bangkok |
| 148 | el | Greek | Cyprus | Nicosia | Asia/Nicosia |
| 149 | ms | Malay | Malaysia | Kuala Lumpur | Asia/Kuala_Lumpur |
| 150 | sv_SE | Swedish | Sweden | Stockholm | Europe/Stockholm |
| 151 | da_DK | Danish | Denmark | Copenhagen | Europe/Copenhagen |
| 152 | es_HN | Spanish | Honduras | Tegucigalpa | America/Tegucigalpa |

You might want to double check your locale/timezone graph. It currently says the capital of the United States is London.
Link | Juni 28th, 2011 at 9:17 AM
Thanks Jimmy, fixed it.
Link | Juni 28th, 2011 at 11:28 AM