如何将JDBC:Oracle Date转换为Ruby的DateTime?

时间:2011-05-26 12:35:01

标签: ruby oracle jdbc sinatra sequel

我终于弄明白了如何通过JDBC和Sequel将我的Sinatra应用程序连接到现有的Oracle数据库。

现在我的问题是我想将Oracle DB中的日期字段显示为日期和时间。

Oracle的快速日期定义:

  

有效日期范围为4712年1月1日   BC至公元9999年12月31日。该   默认格式已确定   由NLS_DATE_FORMAT显式显示   参数或隐含的   NLS_TERRITORY参数。大小是   固定为7个字节。此数据类型   包含日期时间字段YEAR,   每月,每天,小时,分钟和第二天。   它没有小数秒或   一个时区。

在Ruby中我想这样做:

row_added.strftime('%d.%B %Y %H:%M:%S') => 09.May 2011 00:00:00

但Ruby Date没有几小时或几分钟。

相反,我必须在SQL级别执行此操作以查看时间:

to_char(row_added, 'DD.MM.YY HH24:MI:ss') => 09.05.11 08:33:31

它按预期工作,但不应该是最佳解决方案。

有谁能告诉我如何让Ruby Sequel将其转换为Time或DateTime值而不是Date?

2 个答案:

答案 0 :(得分:3)

续集将Java::JavaSQL::TimestampJava::JavaSQL::Time类转换为ruby Time/DateTim,将Java::JavaSQL::Date类转换为ruby Datehttps://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc.rb#L579)。如果Oracle使用Java::JavaSQL::Date的子类但包含时间信息,那么它们做错了,它们应该是子类Java::JavaSQL::Timestamp

无论如何,为了解决这个问题,您需要将Dataset#convert_type方法添加到jdbc/oracle subadapterhttps://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc/oracle.rb)并处理Oracle特定日期类型。如果你的工作正常,请提交补丁。

答案 1 :(得分:-1)

尝试此方法:strptime