【问题标题】:How do I convert a JDBC:Oracle Date into a DateTime for Ruby?如何将 JDBC:Oracle 日期转换为 Ruby 的日期时间?
【发布时间】:2011-05-26 12:35:01
【问题描述】:

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

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

来自 Oracle 的快速日期定义:

有效日期范围为 4712 年 1 月 1 日 公元前至公元 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 日期没有小时或分钟。

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

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

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

谁能告诉我如何让 Ruby Sequel 将其转换为时间或日期时间值而不是日期?

【问题讨论】:

    标签: ruby oracle jdbc sinatra sequel


    【解决方案1】:

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

    无论如何,要解决此问题,您需要将 Dataset#convert_type 方法添加到 jdbc/oracle subadapter (https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc/oracle.rb) 并处理 Oracle 特定日期类型的任何内容。如果您可以正常工作,请提交补丁。

    【讨论】:

      【解决方案2】:

      试试这个方法:strptime

      【讨论】:

      • 续集返回的对象是一个日期。日期对象不包含任何小时和分钟。因此我无法为 strptime 方法创建字符串。还是我走错了路?
      猜你喜欢
      • 1970-01-01
      • 2011-04-14
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多