簡體   English   中英

Java Money - 特定日期的貨幣轉換率

[英]Java Money - currency conversion rate on specific date

我試圖在歐元和美元之間的特定日期獲得匯率。 問題是我總是得到交換敢於約會: LocalDate{year=2016, month=1, dayOfMonth=8}如果我在查詢中指定日期並不重要。

這是我的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

謝謝!

這個API目前很模糊。 如果你得到:

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

它將使用以下方法:

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

如您所見, conversionQuery用於獲取提供程序, 而不是轉換對象本身。 它始終返回查詢時只設置貨幣,從不與日期一起返回。

為了使其工作使用:

MonetaryConversions.getExchangeRateProvider().getCurrencyConversion(conversionQuery)

我相信它應該對所有調用都一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM