2011-05-26 23 views
1

我終於明白瞭如何通過JDBC和Sequel將我的Sinatra應用連接到現有的Oracle數據庫。如何將JDBC:Oracle Date轉換爲Ruby的DateTime?

現在我的問題是,我想從Oracle數據庫中顯示日期字段作爲日期與時間。從Oracle

快速日期定義:

有效的日期範圍從4712年1月1 BC 到12月31日,公元9999。 默認格式由NLS_DATE_FORMAT 參數明確確定,或由NLS_TERRITORY參數隱式確定 。大小爲 ,固定爲7個字節。此數據類型 包含日期時間字段YEAR, MONTH,DAY,HOUR,MINUTE和SECOND。 它沒有小時秒數或 時區。

在Ruby中,我想這樣做:

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

但是Ruby的日期沒有小時或分鐘。

相反,我必須這樣做在SQL級別,看看時間:

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

它工作正常,但不應該是這種情況的最佳解決方案。

任何人都可以告訴我如何讓Ruby Sequel將其轉換爲Time或DateTime值而不是Date嗎?

回答

-1

嘗試此方法:strptime

+0

從續集返回的對象是日期。日期對象不包含任何小時和分鐘。因此我無法爲strptime方法創建字符串。或者我正在以這種錯誤的方式去做? – itkevin 2011-05-26 13:02:49

3

續集轉換Java::JavaSQL::TimestampJava::JavaSQL::Time類紅寶石Time/DateTim,和Java::JavaSQL::Date類紅寶石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特定日期類型。如果你的工作正常,請提交補丁。