2017-10-22 200 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)为例,他们有五种日历偏好;格里高利,伊斯兰教乌姆拉古拉,伊斯兰教,伊斯兰教民间和伊斯兰教表格。我会让用户确定他们喜欢哪个日历,以便它们最适合他们。

祝你好运!