2017-01-09 55 views
0

在程序中,我使用以下步骤将美元兑换为美元,反之亦然。一般来说,这个程序适用于任何货币。历史美元兑欧元转换

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")) 

获得在2016年1月4日或什么的$ 1欧元价值过去的日期。我在StackOverflow和其他类似网站上阅读了大量的线索,未找到解决方案。我需要一个使用免费服务的解决方案。

+0

雅虎是否提供这种数据? – wvdz

+2

这是一个关于如何使用Java编写代码或如何使用该网站获取历史转换率的问题? –

+0

两者,但最重要的是第二个。我想要一种方法来从网络中检索这些信息。如果还有Java代码,它会更好,但我也可以自己实现它。 –

回答

0

感谢Berger的回答,我可以实现我的方法。这里是它的样子。我希望这可能对这个论坛中的其他人有用。

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; 
}