2013-12-09 11 views
16

Sto cercando di aggiungere bitcoin come valuta da visualizzare sul mio sito. Ho tassi di cambio e tutto il resto, ma continuo a ricevere uno IllegalArgumentException ogni volta che uso java.util.Currency.getInstance("BTC"). Questo ha senso dal momento che non è incluso nell'elenco dei codici valuta ISO 4217 e anche non in Java 7. Ho visto un paio di opzioni, ma nulla che risolva il mio problema.Implementazione di Bitcoin e java.util.Currency

  1. Secondo il Java platform docs, è possibile ignorare la valuta di un locale specifica creando un file $JAVA_HOME/lib/currency.properties. Questo è un problema dal momento che bitcoin non è legato ad un locale specifico, né dovrebbe essere usato al posto della valuta di qualsiasi paese.

  2. Un'altra situazione simile è stata presentata in this StackOverflow postale, dove la Cina ha avuto un secondo codice di valuta da utilizzare, in modo che la soluzione era quella di costruire il proprio currency.data di file che ha aggiunto una seconda moneta per le impostazioni internazionali la Cina. Questo è meglio, ma c'è ancora il problema di legare una valuta a una localizzazione.

Qualcuno si è imbattuto in questo problema o ha trovato una soluzione alternativa? So che il bitcoin è relativamente nuovo, ma sarebbe bello poter visualizzare i prezzi in formato bitcoin.

+7

Ti * hanno * utilizzare per java.util.Currency? Potresti semplicemente usare String o scrivere la tua classe invece. – aditsu

+0

In una parola, sì. Questa applicazione è enorme e questo non avrebbe dovuto essere un grande cambiamento, quindi costruire una nuova classe non vale la pena a questo punto. Ora, se effettivamente iniziassimo ad accettare pagamenti in bitcoin o qualcosa del genere, forse sarebbe necessario. Grazie! – tedski

+0

Bene, l'hacking con la riflessione è un modo :) – aditsu

risposta

9

Non è possibile utilizzare BTC come codice valuta per bitcoin con ISO 4217. BT is reserved per il Bhutan. Tuttavia, ISO 3166-1 reserves several country codes per la definizione dell'utente. Inoltre, il wiki per ISO 4217 lists XBT come codice valuta per bitcoin (non ufficiale, ovviamente).

Locale.Builder b = new Locale.Builder(); 
b.setRegion("XB"); 
Locale xb = b.build(); 
Currency bitcoin = Currency.getInstance(xb); 

Il file currency.properties sarà simile:

XB=XBT,000,3 

Purtroppo, non si può avere 8 for the minor unit perché l'analisi per java.util.Currency gestisce solo un'unità minore della 0-3:

Pattern propertiesPattern = Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])"); 
+0

Interessante, esaminerò questo. Probabilmente lo accantoneremo per ora, ma grazie per questo! – tedski

+0

Va bene, ho provato il tuo metodo ma non riesco a capire come ottenere da 'currency.properties'. Ho anche provato a sostituire la valuta del Bhutan solo per vedere se avrebbe funzionato. C'è qualche cache che ho bisogno di cancellare o qualcosa del genere? – tedski

+0

@tedski Non che io sappia. Stai posizionando il file nella posizione corretta? Prova a fare 'System.println (System.getProperty (" java.home "))' per vedere dove '$ JAVA_HOME' è. (Potresti avere più JVM installate sul tuo computer o se stai usando il JDK potrebbe usare la cartella 'jre' come sua home.) – Jeffrey

Problemi correlati