Java货币-特定日期的货币兑换率

Java货币-特定日期的货币兑换率,java,currency,java-money,Java,Currency,Java Money,我想知道具体日期欧元和美元之间的汇率。问题是我一直在获取日期的exchange数据:LocalDate{year=2016,month=1,dayOfMonth=8},如果我在查询中指定日期,这并不重要 以下是我的maven依赖项: <dependency> <groupId>javax.money</groupId> <artifactId>money-api-bp</arti

我想知道具体日期欧元和美元之间的汇率。问题是我一直在获取日期的exchange数据:
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>
以及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)

我相信它应该对所有调用都能始终如一地工作。

您要导入哪个
LocalDate
类?LocaleDate看起来像来自JDK8的类。为什么要使用用JDK7显式编译的backport库(
-bp
)?我使用java.time.LocalDate作为导入。因为如果我在没有bp的情况下使用money依赖api,结果会得到null。错误的导入并不能解释为什么在第二个例子中我得到了一些旧的日子。如果我改为:.set(org.javamoney.moneta.internal.convert.LocalDate.class,org.javamoney.moneta.internal.convert.LocalDate.from(Calendar.getInstance()),我也会遇到同样的问题。
MonetaryConversions.getExchangeRateProvider().getCurrencyConversion(conversionQuery)