OpenEdge 10.1在JDBC中以非标准字符串的形式返回datetimetz



我试图访问一个代表datetimetz ABL类型的DB字段。我尝试了ResultSet.getTimestamp(int),这应该是正确的,尽管驱动程序抱怨[DataDirect][OpenEdge JDBC Driver]Value can not be converted to requested type.

我已经尝试了ResultSet上所有的日期和时间getter,没有工作。调用ResultSet.getObject(int)返回一个代表该值的String,然而这个值是一个非标准格式,实际上有一个怪怪,使得很难用SimpleDateFormat解析,这个格式看起来像"2013-03-08 21:55:10:903 + 11:00"。

从这个古怪的日期开始,由于时区限定符中+/-后面的空间,它不能用格式字符串清晰地解析,我不得不采用以下丑陋的方法:

String r = rs.getString(col);
if (r == null) {
    return null;
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSXXX",
                                     Locale.getDefault());
try {
    return df.parse(r.substring(0, 23)
                  + r.substring(24, 25)
                  + r.substring(26));
} catch (ParseException ex) {
    return null;
}

我正在使用OpenEdge 10.1.C04

遗憾的是,检索TIMESTAMP WITH TIME ZONE值作为时间戳是不支持的

最新更新