Java 遇到彭博API NotFoundException

Java 遇到彭博API NotFoundException,java,bloomberg,Java,Bloomberg,我有一个使用彭博API从彭博社请求数据的代码。 在我修复了所需的外部jar并安装了新的JDK(jdk1.8)之后,它运行起来没有任何问题。然而,当我编辑了公司ID后再次运行它时,我想从彭博社请求其证券,它显示了以下异常 Exception in thread "main" com.bloomberglp.blpapi.NotFoundException: securityData not found in: HistoricalDataResponse at com.bloomb

我有一个使用彭博API从彭博社请求数据的代码。 在我修复了所需的外部jar并安装了新的JDK(jdk1.8)之后,它运行起来没有任何问题。然而,当我编辑了公司ID后再次运行它时,我想从彭博社请求其证券,它显示了以下异常

Exception in thread "main" com.bloomberglp.blpapi.NotFoundException: securityData not found in: HistoricalDataResponse
        at com.bloomberglp.blpapi.impl.aL.e(ElementImpl.java:3070)
        at com.bloomberglp.blpapi.impl.aL.d(ElementImpl.java:3045)
        at com.bloomberglp.blpapi.impl.aL.getElement(ElementImpl.java:558)
        at com.bloomberglp.blpapi.impl.h.getElement(MessageImpl.java:164)
        at bbg_upload.test1.processHistoricalStockDataResponse(test1.java:252)
        at bbg_upload.test1.handleResponseEvent(test1.java:221)
        at bbg_upload.test1.doo(test1.java:206)
        at bbg_upload.test1.main(test1.java:117)
我对彭博API还不是很熟悉。然而,当我试图在另一台PC上运行相同的代码时,它运行时没有显示上述异常

第252行的代码如下:, (特别是“securityData”所在的行)


我一直在用谷歌搜索为什么会出现这个错误。我认为它不在Bloomberg API的实现中,因为它在另一台PC上成功运行。它可能与环境变量有关?

根据在任何一台机器上设置的区域设置,这行代码的日期输出:
字符串可用\u date=dateFormat.format(new java.util.date())对于您的机器和您尝试的第二台机器可能不一样,这就是为什么我认为它在一台机器上工作,而不是在另一台机器上工作

Date
是自Unix纪元(1970年1月1日00:00:00 UTC)以来毫秒数的容器

t没有格式的概念

例如

Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);
输出

美国东部时间8月28日星期三16:20:39

2013-08-28-2016 2013-08-28

8月28日星期三16:20:39 美国东部时间2016

所有格式均未更改基础日期值。这就是DateFormatters的用途


尝试在日期上执行tostring,然后在该日期上使用格式化程序。希望这有帮助。

我已经在
元素securityDataArray=msg.getElement(“securityData”)中找到了它失败的原因

我加了一句,试图检查邮件是否有响应错误

DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());

if(msg.hasElement("responseError")){
    System.out.println("responseError encountered! " + msg.getElement("responseError").getElement("message"));
}

Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";

Element fieldDataArray = securityDataArray.getElement("fieldData");
然后,它显示以下内容。 (为了安全起见,我将uuid、SN、sid、nid替换为x)


问题电脑上的彭博终端已经达到了每月的上限,而我第一次报告代码在哪里成功运行的电脑还没有达到。(它没有遇到responseError)

我尝试了以下
可用字符串\u date=dateFormat.format(new java.util.date().toString())
但它给了我
java.lang.IllegalArgumentException
format()方法,它只对日期对象而不是字符串进行操作。另外,我试着在两台电脑上打印日期,结果显示的格式都一样。i、 e.
new java.util.Date()
2016年8月16日星期二09:44:44 SGT
dateFormat.format(new java.util.Date())显示两台电脑中的20160816
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String available_date = dateFormat.format(new java.util.Date());

if(msg.hasElement("responseError")){
    System.out.println("responseError encountered! " + msg.getElement("responseError").getElement("message"));
}

Element securityDataArray = msg.getElement("securityData");
String ticker = securityDataArray.getElementAsString("security");
String line = "";
String value = "";

Element fieldDataArray = securityDataArray.getElement("fieldData");
responseError encountered! message = uuid: xxxxxxxx, SN: xxxxxx, sid: xxxxxxx Monthly limit reached. [nid:xxx]