Исторический перевод доллара США в евро
В программе я использую следующую процедуру для конвертации евро в доллары или наоборот. В общем, эта процедура прекрасно работает с любой валютой.
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;
}