2017-10-22 201 views
9

日曆類型正如你所知道ICU支持以下日曆:如何獲得由地區字符串

Japanese 
Buddhist 
Chinese 
Persian 
Indian 
Islamic 
Hebrew 
Indian 
Coptic 
Ethiopic 

然而IntlDateFormatter僅日期公曆格式轉換爲語言環境和不會自動轉換日曆,但它有可能發送給它的日曆,它會做的伎倆。問題是我必須爲每個區域設置手動確定日曆系統。

如何從語言環境字符串獲取日曆類型。例如發送fa_IR我需要'波斯',所以發送它到IntleDateFormatter生成該語言環境的數據字符串。

+0

可能要考慮這一點。請參閱:https://stackoverflow.com/a/44395179/1219741 – jaswrks

回答

3

總之;你不能。爲什麼?

讓我們來看看這兩個對象是什麼: IntlDateFormatter是國際化擴展的一部分,它是爲執行各種區域感知操作而構建的。這些操作包括日期格式化程序和區域識別日曆。

Locale class是用於獲取語言,文化或區域特定行爲的標識符。

儘管它們是相同擴展的一部分,但它們是正交的,如here所述。這意味着你不能從另一箇中確定一個。該聲明在ICU項目提供的用戶指南中得到進一步驗證。

...目前,除兼容性語言環境th_TH_TRADITIONAL和ja_JP_TRADITIONAL以外,所有語言環境默認爲公曆日曆。如果提供「日曆」關鍵字,則此值將覆蓋該語言環境的默認值。

Source: User guide ICU project

作爲報價狀態中的任何區域設置默認爲除非提供了「日曆」關鍵字公曆。他們不能從自動提供的語言環境中派生日曆。

解決您的問題最有可能發現在自己構建包裝。互聯網上有一些軟件包可以幫助你解決這個問題,但它遠不及你想要的東西。如果您需要保存日期,請將其保存爲時間戳並以用戶所需的格式顯示,後者是您可以自由執行某些帳戶設置或任何類似操作。

我在尋求答案中找到靈感的一個模塊是GlobalizeJS。有一個開放的open issue,描繪了一個有趣的圖片,說明它的正確性有多困難。以阿拉伯聯合酋長國(AE)爲例,他們有五種日曆偏好;格里高利,伊斯蘭教烏姆拉古拉,伊斯蘭教,伊斯蘭教民間和伊斯蘭教表格。我會讓用戶確定他們喜歡哪個日曆,以便它們最適合他們。

祝你好運!