在 DbUnit 的 oracle.sql.TIMESTAMPTZ 和标准 JDBC 类之间进行转换

发布于 2024-07-07 10:52:15 字数 269 浏览 14 评论 0原文

我正在运行 Oracle 10g,并且具有 Type_Name 的列,

TIMESTAMP(6) WITH TIME ZONE

当膨胀为 java 类时,它们会显示为

oracle.sql.TIMESTAMPTZ 

但 DbUnit 无法处理将 Oracle 特定类转换为字符串以写入 XML。 我想知道是否有任何简单的方法可以将这些 Oracle 特定时间戳转换(例如,在我的 SELECT 语句中)到 java.sql 中的某些内容。

I'm running Oracle 10g and have columns with Type_Name

TIMESTAMP(6) WITH TIME ZONE

When inflated into java classes they come out as

oracle.sql.TIMESTAMPTZ 

But DbUnit can't handle converting Oracle specific classes to Strings for writing to XML. I'm wondering if there's any easy way for me to convert (say, in my SELECT statement somehow) from these Oracle specific timestamps to something in java.sql.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

少钕鈤記 2024-07-14 10:52:15

我不必完全处理这个问题,但我认为将其作为 SELECT 查询中的字符串来处理就可以了。

您可以使用 to_char 函数。 将其转换为字符串。 例如:

SQL> select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

D
----------------------------------
2008-10-21 17:00:43.501591

您的程序会将其视为字符串。 TZD 包含时区信息(本示例中没有)

稍后,Java 可以使用 SimpleDateFormat 类。

或者,oracle.sql.TIMESTAMPTZ 类有一个名为 dateValue 的方法,它返回一个 java.sql.Date 类。

I haven't had to deal with this problem exactly, but I presume that having it come through as a string from the SELECT query would be fine.

You could use the to_char function. To convert it to a string. e.g:

SQL> select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

D
----------------------------------
2008-10-21 17:00:43.501591

This would then be seen by your program as a string. TZD includes timezone information (of which there is none in this example)

Later, this could then be parsed by Java using the SimpleDateFormat class.

Alternatively, the oracle.sql.TIMESTAMPTZ class has a method called dateValue that returns a java.sql.Date class.

彡翼 2024-07-14 10:52:15

我想指出的是,使用 IYYY 作为年份格式可能不是一个好主意,除非您确实想获得 ISO 年份。 您应该使用 YYYY 而不是 IYYY。

尝试使用

select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

返回“2013-12-31 00:00:00.000000000”运行 2012 年 12 月 31 日的 SQL,这不是您期望的年份。

I would like to remark that using IYYY as format for the year might not be a good idea unless you really want to get the ISO year. You should use YYYY instead of IYYY.

Try to run your SQL for 31.12.2012 using

select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

returns "2013-12-31 00:00:00.000000000" which is not the year you would expect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文