如何從 xml 文件中提取 cldr 時區以儲存在數據庫表中?
在我們的數據庫中,我需要將每個位置與“時區”相關聯。
這些時區位於https://github.com/unicode-org/cldr/blob/release-36-1/common/supplemental/metaZones.xml
我想在那個 xml 文件中創建一個時區名稱字元串表,這樣我們就有一個“時區表 ID”,我可以將它作為位置數據的一部分發送到客戶端軟體。客戶端包含使用時區來確定該位置給定日期時間的時間偏移量(例如 UTC+1)的程式碼。
也就是說,為了某些(內部)目的,我們將使用此表 ID,而不是儲存/發送/解析時區字元串。
如何從該 xml 文件中提取時區名稱字元串列表,並將其儲存在數據庫表中?(顯然我可以編寫一個小程序來做到這一點,但肯定有人已經這樣做了。)
或者也許在每個版本的其他地方
cldr
,有這些時區的(明文)列表?或者
CSV
格式化的資訊,手動按摩會更容易。
部分答案:如何將相關資訊轉換為
csv
.編輯文件以刪除除此部分之外的所有內容:
<metazoneInfo> <timezone type="Africa/Abidjan"> <usesMetazone mzone="GMT"/> </timezone> ... <timezone type="PST8PDT"> <usesMetazone mzone="America_Pacific"/> </timezone> </metazoneInfo>
使用 XML 到 CSV 轉換器。(我使用了 https://www.convertcsv.com/xml-to-csv.htm)
結果:
usesMetazone/0/_mzone,_type,usesMetazone/0/_to, ... GMT,Africa/Abidjan,,,,,,,,,,,,,,,,,,,,,,,,, GMT,Africa/Accra,,,,,,,,,,,,,,,,,,,,,,,,, ... Wallis,Pacific/Wallis,,,,,,,,,,,,,,,,,,,,,,,,, America_Pacific,PST8PDT,,,,,,,,,,,,,,,,,,,,,,,,,
第一行描述提取的 XML 屬性。其餘行以“metazone,timezone”開頭。
附加列描述了歷史變化;例如“從日期到日期,元區域”。也就是說,某些時區在指定的日期範圍內使用不同的元區域。
在解釋具有此類歷史數據的任何時區時必須小心。第一列中的元區可能不是目前時區;這在 XML 中更容易看到,其中“metazone 0”是提到的第一個 metazone,因此可能是最早的一個(它有一個“to”日期但沒有“from”日期)。
在那種情況下,我認為 CURRENT 元區域總是最後提到的(最右邊的列,有一個
.../_mzone
標題)。例如,時區“非洲/阿爾及爾”:
XML:
<timezone type="Africa/Algiers"> <usesMetazone to="1977-10-20 23:00" mzone="Europe_Western"/> <usesMetazone to="1979-10-25 23:00" from="1977-10-20 23:00" mzone="Europe_Central"/> <usesMetazone to="1981-05-01 00:00" from="1979-10-25 23:00" mzone="Europe_Western"/> <usesMetazone from="1981-05-01 00:00" mzone="Europe_Central"/> </timezone>
CSV:
Europe_Western,Africa/Algiers,1977-10-20 23:00,1979-10-25 23:00,1977-10-20 23:00,Europe_Central,1981-05-01 00:00,1979-10-25 23:00,Europe_Western,1981-05-01 00:00,Europe_Central,,,,,,,,,,,,,,,,
在電子表格中,我們看到最右邊的兩列是:
usesMetazone/3/_from usesMetazone/3/_mzone 1981-05-01 00:00 Europe_Central
所以目前的元區域是
Europe_Central
,而不是Europe_Western
來自第一列。除了獲得正確的“目前”元區域的問題外,前兩列可以輕鬆導入 DB:stackoverflow thead。