Java 从ResultSet中以字符串形式读取日期时的默认JDBC日期格式

Java 从ResultSet中以字符串形式读取日期时的默认JDBC日期格式,java,jdbc,Java,Jdbc,我正在看一些基本上实现以下功能的代码: ResultSet rs = ps.executeQuery(); String myDateStr = rs.getString("MY_DATE"); //field is of type Date SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'.0'"); Date myDate = sdf.parse(myDateStr); 在某些环境中,最后一行起作用,而在其他

我正在看一些基本上实现以下功能的代码:

ResultSet rs = ps.executeQuery();
String myDateStr = rs.getString("MY_DATE"); //field is of type Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'.0'");
Date myDate = sdf.parse(myDateStr);
在某些环境中,最后一行起作用,而在其他环境中,它抛出一个不可解析的日期异常。在某些系统上,默认日期格式为2013-01-25 00:00:00.0,而在其他系统上,默认日期格式为2013-01-25 00:00:00。 JVM、OS和Oracle版本在不同的环境中是不同的(但都使用Oracle并在unix变体上运行)


更改代码可能很复杂。我想知道是否有一个环境变量或类似的变量可以设置为使从rs.getString()返回的日期格式一致?

如果字段的类型为
date
,则将其作为
java.sql.date
读取,然后进行任何需要的转换。否则,您将受数据库实现的支配。

而不是使用

String myDateStr = rs.getString("MY_DATE") 
你应该使用

Timestamp timestamp = rs.getTimestamp("MY_DATE");
JDBC/数据库将为您处理日期转换。

尝试以下方法:

ResultSet rs = ps.executeQuery();

Date myDate = rs.getDate("MY_DATE"); 
或者这个:

ResultSet rs = ps.executeQuery();
String myDateStr = rs.getString("MY_DATE"); 
Date myDate = valueOf(myDateStr);
有关日期的更多信息:

关于ResultSet的更多信息:

对于我正在使用的Oracle JDBC驱动程序,该格式在驱动程序库中是硬编码的,因此只有在使用不同的驱动程序版本时,才应该在不同的系统中有所不同

请参阅我试图在此处获得相同问题的答案:


(很抱歉问了一个单独的问题,但由于您的问题已经得到了多次有用的“不要那样做”回答,我再次尝试了……).

阅读本文只是为了澄清——我之所以说更改可能很复杂,是因为在一个由大型xml配置文件驱动的框架中,上面的代码实际上是在不同的类之间分割的。切换为将其作为java.sql.Date读取会很好,但这样做可能会产生一些下游后果……究竟为什么要将
getString()
用于
Date
列。这完全没有意义。使用
getDate()
一切正常。