2017-09-11 16 views
2

EURとUSDの間の特定の日に為替レートを取得しようとしています。問題は私がいつも交換の日を受けていることです:LocalDate{year=2016, month=1, dayOfMonth=8}そして質問に日付を指定するかどうかは関係ありません。ここでJava Money - 特定の日付の通貨換算レート

私のMavenの依存関係です:

 <dependency> 
      <groupId>javax.money</groupId> 
      <artifactId>money-api-bp</artifactId> 
      <version>1.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.javamoney</groupId> 
      <artifactId>moneta-bp</artifactId> 
      <version>1.1</version> 
     </dependency> 

ソースコード:

public class Test { 
    public static void main(String[] args) { 
     ConversionQuery query = ConversionQueryBuilder.of() 
       .setProviderName("ECB") 
       .setBaseCurrency(Monetary.getCurrency("EUR")) 
       .setTermCurrency(Monetary.getCurrency("USD")) 
       .set(LocalDate.class, LocalDate.of(2017, Month.SEPTEMBER, 10)) 
       .build(); 
     final ExchangeRateProvider provider = getExchangeRateProvider(query); 
     final ExchangeRate rate1 = provider.getExchangeRate(query); 
     System.out.println(rate1); 

     ExchangeRateProvider ecbExchangeRateProvider = MonetaryConversions.getExchangeRateProvider("ECB"); 
     ExchangeRate rate = ecbExchangeRateProvider.getExchangeRate("EUR", "USD"); 
     System.out.println(rate); 

    } 
} 

そしてSOUTからの出力:

sep. 11, 2017 9:58:29 AM org.javamoney.moneta.internal.convert.ECBAbstractRateProvider newDataLoaded 
INFO: Loaded ECBCurrentRateProvider exchange rates for days:1 
sep. 11, 2017 9:58:30 AM org.javamoney.moneta.internal.convert.ECBAbstractRateProvider newDataLoaded 
INFO: Loaded ECBHistoric90RateProvider exchange rates for days:63 
ExchangeRate [base=EUR, factor=1.0861, conversionContext=ConversionContext (
{provider=ECB, rateTypes=[DEFERRED], providerDescription=European Central Bank, days=1, org.javamoney.moneta.internal.convert.LocalDate=LocalDate{year=2016, month=1, dayOfMonth=8}, javax.money.convert.RateType=HISTORIC})] 
ExchangeRate [base=EUR, factor=1.0861, conversionContext=ConversionContext (
{provider=ECB, rateTypes=[DEFERRED], providerDescription=European Central Bank, days=1, org.javamoney.moneta.internal.convert.LocalDate=LocalDate{year=2016, month=1, dayOfMonth=8}, javax.money.convert.RateType=HISTORIC})] 
ExchangeRate [base=USD, factor=0.9207255317189946, conversionContext=ConversionContext (
{provider=ECB, rateTypes=[DEFERRED], providerDescription=European Central Bank, days=1, org.javamoney.moneta.internal.convert.LocalDate=LocalDate{year=2016, month=1, dayOfMonth=8}, javax.money.convert.RateType=HISTORIC})] 
sep. 11, 2017 9:58:35 AM org.javamoney.moneta.internal.convert.ECBAbstractRateProvider newDataLoaded 
INFO: Loaded ECBHistoricRateProvider exchange rates for days:4358 

ありがとう!

+0

どのLocalDateクラスをインポートしていますか? –

+0

'LocaleDate'はJDK8のものと似ています。 JDK7で明示的にコンパイルされたバックポートライブラリ( '-bp')を使っているのはなぜですか? – vl4d1m1r4

+0

私はjava.time.LocalDateをインポートとして使用しています。なぜなら、私がbpなしでmoney-apiに依存していると、結果としてnullになるからです。そして間違った輸入は、なぜ私が2番目の例で何歳の日を得るのか説明していない。そして、もし私が:.set(org.javamoney.moneta.internal.convert.LocalDate.class、org.javamoney.moneta.internal.convert.LocalDate.from(Calendar.getInstance())に変更すると、同じ問題が発生します。 – Kiki

答えて

1

このAPIは現在不明です。あなたが出た場合:ない変換オブジェクト自体、あなたが見ることができるように、conversionQueryがプロバイダを取得するために使用され

default CurrencyConversion getConversion(ConversionQuery conversionQuery) { 
    return getExchangeRateProvider(conversionQuery).getCurrencyConversion(
      Objects.requireNonNull(conversionQuery.getCurrency(), "Terminating Currency is required.") 
    ); 
} 

ConversionQueryBuilder.of().setTermCurrency("EUR"). 
     set(LocalDate.class, LocalDate.of(2018, 1, 1)).build() 
MonetaryConversions.getConversion(conversionQuery) 

をそれは次のメソッドを使用します。通貨セットのみを使用し、日付は決して使用しません。私はそれがすべての呼び出しのために一貫して動作するはずと信じて

MonetaryConversions.getExchangeRateProvider().getCurrencyConversion(conversionQuery) 

は作業に活用します。