实现比特币和 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的主要内容,如果未能解决你的问题,请参考以下文章

比特币和区块链:比特币中区块链的实现

关于比特币和区块链的3件重要事项

比特币和区块链:比特币的共识机制

一文读懂︱比特币和以太坊都有哪些区块?

数据分析,比特币和区块链的理解

请出售大量的比特币和以太币吧!成为我们的金融伙伴吧!