はじめに
当方 Tweet Activity Chart (http://forest.watch.impress.co.jp/docs/serial/netserv/1007839.html) という、ツイートを分析して結果をグラフ表示する(ありがちな?)Web アプリの作者です。開発言語には PHP を使っています。
この Web アプリではツイートの作成日時も分析対象として扱うため、UserTimeline API で取得した世界標準時の作成日時(created_at)を地方時に変換しています。UserTimeline API が返す JSON を見たことがある方なら、user/utc_offset を足せばいいだけと思われるかもしれません。しかし user/utc_offset にはツイート「取得時」の時差が設定されています。これは夏時間のない地域なら問題ないのですが、夏時間のある地域だと単純に足すことができません。
そこで user/utc_offset の使用は諦めて、まさにこういうときのためのタイムゾーン user/time_zone を使ってみようと思いましたが、これは "London" などツイッターの設定画面に表示されるユーザー向けの表示が基準となっていて正式なタイムゾーン識別子ではないためこれをそのまま使うこともできませんでした。
この件を含めて、当初はメンションも取得できるユーザ認証としており、AccountSettings API をユーザ認証後に使って正式なタイムゾーン識別子である time_zone/tzinfo_name を取得していました。ところが利用者にとっては一番権限の少ない読込専用ですら認証というだけで敷居が高いと思われるので、ユーザ認証はやめて(※)アプリケーション認証とし、メンションの分析機能は外すことにしました。そして唯一の問題は、ユーザ認証しないと使えない AccountSettings API の代わりに正式なタイムゾーン識別子を取得する方法を探すことでした。
(※)この記事執筆時。現在はユーザ認証版もあります。
ツイッターの設定画面に表示される全143のタイムゾーンを調査してみた
いろいろ調べてみましたが、ユーザ認証が必要な AccountSettings API 以外に正式なタイムゾーン識別子を取得する方法が分からなかったので、
- 自分のアカウントのタイムゾーン設定をツイッターの設定画面で変える。
- 自分のアカウントをユーザ認証して AccountSettings API を呼び出し正式なタイムゾーン識別子が設定されている time_zone/tzinfo_name を記録。
- これを設定画面で設定可能な全143のタイムゾーンに対して行う。
という手順で途中休憩を入れたり API の Rate limit エラーが出たら他のアカウントにするなどして、半日がかりで設定画面にある全143のタイムゾーンを調査しました。このようにかなり苦労したこともあり、この度この調査結果をシェアすることにしました。
ツイッター:タイムゾーン識別子の対応表
対応表の項目の内容は左から順に以下の通りです。
(1) No
(2) ツイッタータイムゾーン(表示)
ツイッターの設定画面に表示されるタイムゾーン。
(3) ツイッタータイムゾーン(内部)
UserTimeline, UsersLookup API 等で取得できる、ツイッターで内部使用されているタイムゾーン(user/time_zone)。
(4) タイムゾーン識別子
AccountSettings API で取得できる正式なタイムゾーン識別子(time_zone/tzinfo_name)。
例えば、「ツイッタータイムゾーン(内部)」をキー、「タイムゾーン識別子」を値として連想配列を作れば、UserTimeline や UsersLookup API で取得した user/time_zone をそのままキーにして正式なタイムゾーン識別子を取得できます。
但しタイムゾーンの設定が行われていない(user/utc_offset や user/time_zone の値が null になっている)アカウントもあるので注意してください。
※調査日:2016年6月9日
No | ツイッタータイムゾーン(表示) | ツイッタータイムゾーン (内部) | タイムゾーン識別子 |
---|---|---|---|
1 | (GMT-11:00) International Date Line West | International Date Line West | Pacific/Midway |
2 | (GMT-11:00) Midway Island | Midway Island | Pacific/Midway |
3 | (GMT-11:00) Samoa | Samoa | Pacific/Pago_Pago |
4 | (GMT-10:00) Hawaii | Hawaii | Pacific/Honolulu |
5 | (GMT-08:00) Alaska | Alaska | America/Juneau |
6 | (GMT-07:00) Pacific Time (US & Canada) | Pacific Time (US & Canada) | America/Los_Angeles |
7 | (GMT-07:00) Tijuana | Tijuana | America/Tijuana |
8 | (GMT-07:00) Arizona | Arizona | America/Phoenix |
9 | (GMT-06:00) Mountain Time (US & Canada) | Mountain Time (US & Canada) | America/Denver |
10 | (GMT-06:00) Chihuahua | Chihuahua | America/Chihuahua |
11 | (GMT-06:00) Mazatlan | Mazatlan | America/Mazatlan |
12 | (GMT-06:00) Sakatchewan | Saskatchewan | America/Regina |
13 | (GMT-06:00) Central America | Central America | America/Guatemala |
14 | (GMT-05:00) Central Time (US & Canada) | Central Time (US & Canada) | America/Chicago |
15 | (GMT-05:00) Gaudalajara | Guadalajara | America/Mexico_City |
16 | (GMT-05:00) Mexico City | Mexico City | America/Mexico_City |
17 | (GMT-05:00) Monterrey | Monterrey | America/Monterrey |
18 | (GMT-05:00) Bogota | Bogota | America/Bogota |
19 | (GMT-05:00) Lima | Lima | America/Lima |
20 | (GMT-05:00) Quito | Quito | America/Lima |
21 | (GMT-04:00) Eastern Time (US & Canada) | Eastern Time (US & Canada) | America/New_York |
22 | (GMT-04:00) Indiana (East) | Indiana (East) | America/Indiana/Indianapolis |
23 | (GMT-04:00) Caracas | Caracas | America/Caracas |
24 | (GMT-04:00) La Paz | La Paz | America/La_Paz |
25 | (GMT-04:00) Santiago | Santiago | America/Santiago |
26 | (GMT-04:00) Georgetown | Georgetown | America/Guyana |
27 | (GMT-03:00) Atlantic Time (Canada) | Atlantic Time (Canada) | America/Halifax |
28 | (GMT-03:00) Brasilia | Brasilia | America/Sao_Paulo |
29 | (GMT-03:00) Buenos Aires | Buenos Aires | America/Argentina/Buenos_Aires |
30 | (GMT-02:30) Newfoundland | Newfoundland | America/St_Johns |
31 | (GMT-02:00) Greenland | Greenland | America/Godthab |
32 | (GMT-02:00) Mid-Atlantic | Mid-Atlantic | Atlantic/South_Georgia |
33 | (GMT-01:00) Cape Verde Is. | Cape Verde Is. | Atlantic/Cape_Verde |
34 | (GMT) Azores | Azores | Atlantic/Azores |
35 | (GMT) Casablanca | Casablanca | Africa/Casablanca |
36 | (GMT) Monrovia | Monrovia | Africa/Monrovia |
37 | (GMT) UTC | UTC | UTC |
38 | (GMT+01:00) Dublin | Dublin | Europe/Dublin |
39 | (GMT+01:00) Edinburgh | Edinburgh | Europe/London |
40 | (GMT+01:00) Lisbon | Lisbon | Europe/Lisbon |
41 | (GMT+01:00) London | London | Europe/London |
42 | (GMT+01:00) West Central Africa | West Central Africa | Africa/Algiers |
43 | (GMT+02:00) Belgrade | Belgrade | Europe/Belgrade |
44 | (GMT+02:00) Bratislava | Bratislava | Europe/Bratislava |
45 | (GMT+02:00) Budapest | Budapest | Europe/Budapest |
46 | (GMT+02:00) Ljubljana | Ljubljana | Europe/Ljubljana |
47 | (GMT+02:00) Prague | Prague | Europe/Prague |
48 | (GMT+02:00) Sarajevo | Sarajevo | Europe/Sarajevo |
49 | (GMT+02:00) Skopje | Skopje | Europe/Skopje |
50 | (GMT+02:00) Warsaw | Warsaw | Europe/Warsaw |
51 | (GMT+02:00) Zagreb | Zagreb | Europe/Zagreb |
52 | (GMT+02:00) Brussels | Brussels | Europe/Brussels |
53 | (GMT+02:00) Copenhagen | Copenhagen | Europe/Copenhagen |
54 | (GMT+02:00) Madrid | Madrid | Europe/Madrid |
55 | (GMT+02:00) Paris | Paris | Europe/Paris |
56 | (GMT+02:00) Amsterdam | Amsterdam | Europe/Amsterdam |
57 | (GMT+02:00) Berlin | Berlin | Europe/Berlin |
58 | (GMT+02:00) Bern | Bern | Europe/Berlin |
59 | (GMT+02:00) Rome | Rome | Europe/Rome |
60 | (GMT+02:00) Stockholm | Stockholm | Europe/Stockholm |
61 | (GMT+02:00) Vienna | Vienna | Europe/Vienna |
62 | (GMT+02:00) Cairo | Cairo | Africa/Cairo |
63 | (GMT+02:00) Harare | Harare | Africa/Harare |
64 | (GMT+02:00) Pretoria | Pretoria | Africa/Johannesburg |
65 | (GMT+03:00) Bucharest | Bucharest | Europe/Bucharest |
66 | (GMT+03:00) Helsinki | Helsinki | Europe/Helsinki |
67 | (GMT+03:00) Kiev | Kiev | Europe/Kiev |
68 | (GMT+03:00) Kyiv | Kyiv | Europe/Kiev |
69 | (GMT+03:00) Riga | Riga | Europe/Riga |
70 | (GMT+03:00) Sofia | Sofia | Europe/Sofia |
71 | (GMT+03:00) Tallinn | Tallinn | Europe/Tallinn |
72 | (GMT+03:00) Vilnius | Vilnius | Europe/Vilnius |
73 | (GMT+03:00) Athens | Athens | Europe/Athens |
74 | (GMT+03:00) Istanbul | Istanbul | Europe/Istanbul |
75 | (GMT+03:00) Minsk | Minsk | Europe/Minsk |
76 | (GMT+03:00) Jerusalem | Jerusalem | Asia/Jerusalem |
77 | (GMT+03:00) Moscow | Moscow | Europe/Moscow |
78 | (GMT+03:00) St. Petersburg | St. Petersburg | Europe/Moscow |
79 | (GMT+03:00) Volgograd | Volgograd | Europe/Moscow |
80 | (GMT+03:00) Kuwait | Kuwait | Asia/Kuwait |
81 | (GMT+03:00) Riyadh | Riyadh | Asia/Riyadh |
82 | (GMT+03:00) Nairobi | Nairobi | Africa/Nairobi |
83 | (GMT+03:00) Baghdad | Baghdad | Asia/Baghdad |
84 | (GMT+04:00) Abu Dhabi | Abu Dhabi | Asia/Muscat |
85 | (GMT+04:00) Muscat | Muscat | Asia/Muscat |
86 | (GMT+04:00) Baku | Baku | Asia/Baku |
87 | (GMT+04:00) Tbilisi | Tbilisi | Asia/Tbilisi |
88 | (GMT+04:00) Yerevan | Yerevan | Asia/Yerevan |
89 | (GMT+04:30) Tehran | Tehran | Asia/Tehran |
90 | (GMT+04:30) Kabul | Kabul | Asia/Kabul |
91 | (GMT+05:00) Ekaterinburg | Ekaterinburg | Asia/Yekaterinburg |
92 | (GMT+05:00) Islamabad | Islamabad | Asia/Karachi |
93 | (GMT+05:00) Karachi | Karachi | Asia/Karachi |
94 | (GMT+05:00) Tashkent | Tashkent | Asia/Tashkent |
95 | (GMT+05:30) Chennai | Chennai | Asia/Kolkata |
96 | (GMT+05:30) Kolkata | Kolkata | Asia/Kolkata |
97 | (GMT+05:30) Mumbai | Mumbai | Asia/Kolkata |
98 | (GMT+05:30) New Delhi | New Delhi | Asia/Kolkata |
99 | (GMT+05:30) Sri Jayawardenepura | Sri Jayawardenepura | Asia/Colombo |
100 | (GMT+05:45) Kathmandu | Kathmandu | Asia/Kathmandu |
101 | (GMT+06:00) Astana | Astana | Asia/Dhaka |
102 | (GMT+06:00) Dhaka | Dhaka | Asia/Dhaka |
103 | (GMT+06:00) Almaty | Almaty | Asia/Almaty |
104 | (GMT+06:00) Novosibirsk | Novosibirsk | Asia/Novosibirsk |
105 | (GMT+06:00) Urumqi | Urumqi | Asia/Urumqi |
106 | (GMT+06:30) Rangoon | Rangoon | Asia/Rangoon |
107 | (GMT+07:00) Bangkok | Bangkok | Asia/Bangkok |
108 | (GMT+07:00) Hanoi | Hanoi | Asia/Bangkok |
109 | (GMT+07:00) Jakarta | Jakarta | Asia/Jakarta |
110 | (GMT+07:00) Krasnoyarsk | Krasnoyarsk | Asia/Krasnoyarsk |
111 | (GMT+08:00) Beijing | Beijing | Asia/Shanghai |
112 | (GMT+08:00) Chongqing | Chongqing | Asia/Chongqing |
113 | (GMT+08:00) Hong Kong | Hong Kong | Asia/Hong_Kong |
114 | (GMT+08:00) Kuala Lumpur | Kuala Lumpur | Asia/Kuala_Lumpur |
115 | (GMT+08:00) Singapore | Singapore | Singapore |
116 | (GMT+08:00) Taipei | Taipei | Asia/Taipei |
117 | (GMT+08:00) Perth | Perth | Australia/Perth |
118 | (GMT+08:00) Irkutsk | Irkutsk | Asia/Irkutsk |
119 | (GMT+09:00) Ulaan Bataar | Ulaan Bataar | Asia/Ulaanbaatar |
120 | (GMT+09:00) Seoul | Seoul | Asia/Seoul |
121 | (GMT+09:00) Osaka | Osaka | Asia/Tokyo |
122 | (GMT+09:00) Sapporo | Sapporo | Asia/Tokyo |
123 | (GMT+09:00) Tokyo | Tokyo | Asia/Tokyo |
124 | (GMT+09:00) Yakutsk | Yakutsk | Asia/Yakutsk |
125 | (GMT+09:30) Darwin | Darwin | Australia/Darwin |
126 | (GMT+09:30) Adelaide | Adelaide | Australia/Adelaide |
127 | (GMT+10:00) Canberra | Canberra | Australia/Melbourne |
128 | (GMT+10:00) Melbourne | Melbourne | Australia/Melbourne |
129 | (GMT+10:00) Sydney | Sydney | Australia/Sydney |
130 | (GMT+10:00) Brisbane | Brisbane | Australia/Brisbane |
131 | (GMT+10:00) Hobart | Hobart | Australia/Hobart |
132 | (GMT+10:00) Vladivostok | Vladivostok | Asia/Vladivostok |
133 | (GMT+10:00) Guam | Guam | Pacific/Guam |
134 | (GMT+10:00) Port Moresby | Port Moresby | Pacific/Port_Moresby |
135 | (GMT+10:00) Solomon ls. | Solomon Is. | Asia/Vladivostok |
136 | (GMT+11:00) Magadan | Magadan | Asia/Magadan |
137 | (GMT+11:00) New Caledonia | New Caledonia | Pacific/Noumea |
138 | (GMT+12:00) Fiji | Fiji | Pacific/Fiji |
139 | (GMT+12:00) Kamchatka | Kamchatka | Asia/Kamchatka |
140 | (GMT+12:00) Marshall Is. | Marshall Is. | Pacific/Majuro |
141 | (GMT+12:00) Auckland | Auckland | Pacific/Auckland |
142 | (GMT+12:00) Wellington | Wellington | Pacific/Auckland |
143 | (GMT+13:00) Nuku'alofa | Nuku'alofa | Pacific/Tongatapu |