代码之家  ›  专栏  ›  技术社区  ›  Kiki

爪哇货币-特定日期的货币兑换率

  •  4
  • Kiki  · 技术社区  · 7 年前

    我想知道具体日期欧元和美元之间的汇率。问题是我一直在为日期交换数据: 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
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   Lukasz Frankowski    6 年前

    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)