【发布时间】:2009-09-22 08:59:20
【问题描述】:
有没有办法在 Java 中获取由 Currency 对象表示的货币的文本描述?
即我有AZM,我想要阿塞拜疆马纳特
【问题讨论】:
-
不是我知道的好问题。
有没有办法在 Java 中获取由 Currency 对象表示的货币的文本描述?
即我有AZM,我想要阿塞拜疆马纳特
【问题讨论】:
这样的映射将再次依赖于Locale...我认为最好的办法是仔细查看ISO 4217,并创建一个从货币代码到货币名称的Map。
【讨论】:
Java 不支持它,但一些库可以做到这一点。
我的第一选择是重症监护室,
此调用可以让您获得多种语言环境中的货币名称。 ICU 还支持 JRE 中没有的所有其他 i18n 功能。但是,它相当大。
另一种选择是 jPOS,
如果您对财务数据做任何事情,这就是事实上的标准。注意它的许可证。我们的律师出于某种原因不喜欢它。
【讨论】:
java.util.Currency 类从 java 1.7 开始实现这一点。
Currency curr = Currency.getInstance("AZM");
System.out.println(curr.getCurrencyCode()); // AZM
System.out.println(curr.getNumericCode()); // 31
System.out.println(curr.getDisplayName()); // Azerbaijani Manat (1993-2006)
不幸的是,这个类离可用性还很远……例如numericCode 中缺少构造函数,一些 displayNames 不包含事件 DisplayName,...
【讨论】:
您必须设置自己的映射。 Google 或 Stackoverflow 问题将指向 ISO site
但是您必须抓取页面,因为似乎没有针对国家/地区的 XML 或文本文件
【讨论】:
不在标准 API 中。 Currency 类背后的数据是从包私有类java.util.CurrencyData 加载的,那里根本没有文本描述。如果你的JDK安装了源代码,你可以看看它。
【讨论】:
openexchangerates.org 以机器可读的JSON 格式在线提供此信息:
http://openexchangerates.org/api/currencies.json
它返回的信息很简单:
{
"AED": "United Arab Emirates Dirham",
"AFN": "Afghan Afghani",
...
"ZMK": "Zambian Kwacha",
"ZWL": "Zimbabwean Dollar"
}
它几乎是免费的,但有一些条款和条件。 Here is the online documentation.
【讨论】: