实现比特币和 java.util.Currency
Posted
技术标签:
【中文标题】实现比特币和 java.util.Currency【英文标题】:Implementing Bitcoin and java.util.Currency 【发布时间】:2013-12-26 18:45:21 【问题描述】:我正在尝试将比特币添加为一种货币以显示在我的网站上。我有汇率和一切,但每当我使用java.util.Currency.getInstance("BTC")
时,我都会收到IllegalArgumentException
。这是有道理的,因为它不包含在 ISO 4217 货币代码列表中,也不包含在 Java 7 中。我已经看到了几个选项,但没有一个能真正解决我的问题。
根据 Java platform docs,您可以通过创建文件 $JAVA_HOME/lib/currency.properties
来覆盖特定区域设置的货币。这是一个问题,因为比特币不受特定地区的限制,也不应该用来代替任何国家/地区的货币。
this *** 帖子中提出了另一种类似情况,其中中国需要使用第二个货币代码,因此解决方案是构建自己的 currency.data
文件,为中国语言环境添加第二个货币.这样更好,但仍然存在将货币与语言环境绑定的问题。
有没有人遇到过这个问题或找到了解决方法?我知道比特币相对较新,但能够以比特币格式显示价格会很酷。
【问题讨论】:
你必须使用java.util.Currency吗?您可以只使用 String 或编写自己的类。 总之,是的。这个应用程序是巨大的,这不应该是一个重大的变化,所以在这一点上构建一个新的类是不值得的。现在,如果我们真的开始接受比特币支付之类的,那么也许这将是必要的。谢谢! 嗯,用反射破解它是一种方法 :) @aditsu 没有必要使用反射进行黑客攻击!看我的回答 【参考方案1】:文档中很好地解释了如何处理比特币。看看这个https://en.bitcoin.it/wiki/Proper_Money_Handling_(JSON-RPC)
希望对你有帮助
【讨论】:
【参考方案2】:您不能使用 BTC 作为ISO 4217 下的比特币的货币代码。 BT is reserved 代表不丹。但是,ISO 3166-1 reserves several country codes 用于用户定义。此外,ISO 4217 lists XBT
的 wiki 作为比特币的货币代码(当然是非官方的)。
Locale.Builder b = new Locale.Builder();
b.setRegion("XB");
Locale xb = b.build();
Currency bitcoin = Currency.getInstance(xb);
您的currency.properties
文件将如下所示:
XB=XBT,000,3
不幸的是,您不能拥有8 for the minor unit,因为java.util.Currency
的解析只处理0-3
的次要单元:
Pattern propertiesPattern = Pattern.compile("([A-Z]3)\\s*,\\s*(\\d3)\\s*,\\s*([0-3])");
【讨论】:
有趣,我会研究一下。我们可能会暂时搁置它,但谢谢! 好吧,我试过你的方法,但我似乎无法从currency.properties
中提取它。我什至尝试更换不丹的货币只是为了看看它是否可行。我需要清除一些缓存吗?
@tedski 我不知道。您是否将文件放置在正确的位置?尝试执行System.println(System.getProperty("java.home"))
以查看$JAVA_HOME
在哪里。 (您的计算机上可能安装了多个 JVM,或者如果您使用的是 JDK,它可能会使用 jre
文件夹作为其主目录。)
就是这样,我把它放在错误的/lib
文件夹中。最终成为$JAVA_HOME/jre/lib
。谢谢!
嘿@Jeffrey,您知道是否有任何方法可以将XB=XBT,000,3
作为-D 标志而不是该属性文件传递?以上是关于实现比特币和 java.util.Currency的主要内容,如果未能解决你的问题,请参考以下文章