Исторический перевод доллара США в евро

В программе я использую следующую процедуру для конвертации евро в доллары или наоборот. В общем, эта процедура прекрасно работает с любой валютой.

public double getRate(String from, String to)
{
    BufferedReader reader = null;
    try
    {
        URL url = new URL("http://quote.yahoo.com/d/quotes.csv?f=l1&s=" + from + to + "=X");
        reader = new BufferedReader(new    InputStreamReader(url.openStream()));

        String line = reader.readLine();

        if (line.length() > 0)
        {
            return Double.parseDouble(line);
        }
    }
    catch (IOException | NumberFormatException e)
    {
        System.out.println(e.getMessage());
    }
    finally
    {
        if (reader != null)
        {
            try
            {
                reader.close();
            }
            catch(IOException e)
            {
            }
        }
    }

    return 0;
}

Моя проблема в том, что я хочу создать аналогичный метод для исторических данных. По сути, мне нужен метод со следующей подписью:

public double getRate(String from, String to, Date date) {
   ...
}

что я могу назвать таким образом:

getRate("USD", "EUR", new SimpleDateFormat( "yyyyMMdd" ).parse( "20160104" ))

чтобы получить значение в 1 евро в 2016/01/04 или любую другую дату в прошлом. Я прочитал много веток о Stackru и других подобных сайтах, но решение не найдено. Мне нужно решение с использованием бесплатного сервиса.

1 ответ

Благодаря ответу Бергера я смог реализовать свой метод. Вот как это выглядит. Я надеюсь, что это может быть полезно для кого-то еще на этом форуме.

public double getRate(String from, String to, Date date) {
    BufferedReader reader = null;
    try {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = df.format(date);
        URL url = new URL("http://currencies.apps.grandtrunk.net/getrate/" + dateString +"/" + from + "/" + to);
        reader = new BufferedReader(new InputStreamReader(url.openStream()));
        String line = reader.readLine();
        if (line.length() > 0) {
            return Double.parseDouble(line);
        }
    } catch (IOException | NumberFormatException e) {
        System.out.println(e.getMessage());
    } finally {
        if (reader != null) try { reader.close(); } catch(IOException e) {}
    }

    return 0;
}
Другие вопросы по тегам