Rails version 5.2.rc1
我正试图通过以下
获取澳大利亚的所有时区 ActiveSupport::TimeZone.country_zones('AU')
但这只会在墨尔本没有完全列出
后返回 <select class="select">
<option value=""></option>
<option value="Adelaide">Adelaide</option>
<option value="Antarctica/Macquarie">Antarctica/Macquarie</option>
<option value="Australia/Broken_Hill">Australia/Broken_Hill</option>
<option value="Australia/Currie">Australia/Currie</option>
<option value="Australia/Eucla">Australia/Eucla</option>
<option value="Australia/Lindeman">Australia/Lindeman</option>
<option value="Australia/Lord_Howe">Australia/Lord_Howe</option>
<option value="Brisbane">Brisbane</option>
<option value="Canberra">Canberra</option>
<option value="Darwin">Darwin</option>
<option value="Hobart">Hobart</option>
<option value="Perth">Perth</option>
<option value="Sydney">Sydney</option>
</select>
如果我能说出所有相关的AU区域,我会非常感激。但我找不到办法。任何帮助指针将不胜感激。
"Australian Eastern Standard Time (e.g. Sydney)"
答案 0 :(得分:2)
这有点复杂,但我会尽力解释。
当您致电ActiveSupport::TimeZone.country_zones('AU')
时,它会执行ActiveSupport::TimeZone#load_country_zones
(source)。
load_country_zones
:
1)迭代TZInfo::Country.get(code).zone_identifiers
2)使用MAPPING
hash映射区域标识符。
第二点至关重要,因为墨尔本失踪了。
TZInfo::Countru.get('AU').zone_identifiers
的回复是:
[
"Australia/Lord_Howe",
"Antarctica/Macquarie",
"Australia/Hobart",
"Australia/Currie",
"Australia/Melbourne",
"Australia/Sydney",
"Australia/Broken_Hill",
"Australia/Brisbane",
"Australia/Lindeman",
"Australia/Adelaide",
"Australia/Darwin",
"Australia/Perth",
"Australia/Eucla"
]
Australia/Melbourne
在那里。但是,当看一下MAPPING
哈希值时,您会看到两个键具有相同的值 - Australia/Melbourne
。
"Canberra" => "Australia/Melbourne"
"Melbourne" => "Australia/Melbourne"
因此,当ActiveSupport通过调用
获取Australia/Melbourne
的密钥时
self[MAPPING.key('Australia/Melbourne')]
它返回Canberra
而不是Melbourne
(first matched key)。
总结一下 - 没有Melbourne
,但Melbourne
中使用了时区。它的名称不同。