从ResultSet读取日期作为字符串时的默认JDBC日期格式

时间:2013-02-05 05:47:13

标签: 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);

在某些环境中,最后一行工作,而在其他环境中,它会抛出一个Unparseable日期异常。在某些系统上,默认日期格式为2013-01-25 00:00:00.0,其他系统在2013-01-25 00:00:00。 JVM,OS和Oracle版本在不同环境之间是不同的(尽管使用Oracle并在unix上运行)。

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

4 个答案:

答案 0 :(得分:4)

试试这个:

ResultSet rs = ps.executeQuery();

Date myDate = rs.getDate("MY_DATE"); 

或者这个:

ResultSet rs = ps.executeQuery();
String myDateStr = rs.getString("MY_DATE"); 
Date myDate = valueOf(myDateStr);

有关日期的更多信息:http://docs.oracle.com/javase/7/docs/api/java/sql/Date.html
有关ResultSet的更多信息:http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

答案 1 :(得分:3)

而不是使用

String myDateStr = rs.getString("MY_DATE") 

你应该使用

Timestamp timestamp = rs.getTimestamp("MY_DATE");

JDBC / Database将为您处理日期转换。

答案 2 :(得分:2)

如果该字段的类型为Date,则将其作为java.sql.Date读取,并在此之后执行您需要的任何转换。否则,你将受到数据库实施的支配。

答案 3 :(得分:0)

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

请参阅我在此处尝试回答同一问题:Where is the date format specified when reading a date as a string from JDBC ResultSet

(对于问一个单独的问题道歉,但是由于你的问题已经多次回答,并且只是回答了“只是不要那样做”,我再次尝试了......)。