Informix JDBC 时间戳字符串格式
我有 Informix 数据库,其时间戳字段定义为 YEAR TO SECOND。 当我使用 JDBC rs.getString(column) 显示此字段时,它使用毫秒格式,因此此字段看起来像:
2008-12-18 13:58:14.0
我希望它仅使用 YEAR TO SECOND 字段。 我设置了环境变量:
GL_DATETIME=%Y-%m-%D %H:%M:%S
但即便如此我也得到了毫秒。 使用 ODBC 的程序不显示毫秒。 如何仅接收 TIMESTAMP 字符串“YEAR TO SECOND”? 在我的程序中,我可以检查元数据,如果字段是时间戳,然后剪切“.0”,但我认为应该有更简单的方法。
服务器版本: IBM Informix Dynamic Server 版本 11.50.TC2DE
客户端版本: IBM Informix Dynamic Server 3.50.JC3DE 的 IBM Informix JDBC 驱动程序
编辑 如果我使用 getString(),看起来我测试的所有其他 JDBC 驱动程序(Oracle 和 PostgreSQL)都会显示带有毫秒的时间戳列。 所以我使用了托德提出的解决方案。 我检查元数据,如果列是时间戳,那么我使用 getTimestamp() 并格式化它。
I have Informix database with timestamp field defined as YEAR TO SECOND.
When I show this field using JDBC rs.getString(column) it uses format with miliseconds so this field looks like:
2008-12-18 13:58:14.0
I would like it to use only YEAR TO SECOND fields. I set environment variable:
GL_DATETIME=%Y-%m-%D %H:%M:%S
but even then I got miliseconds. Programs using ODBC do not show milisecond. How can I receive TIMESTAMP string "YEAR TO SECOND" only? In my program I can check metadata if field is TIMESTAMP and then cut ".0", but I think there should be simplier way.
Server version:
IBM Informix Dynamic Server Version 11.50.TC2DE
Client version:
IBM Informix JDBC Driver for IBM Informix Dynamic Server 3.50.JC3DE
EDIT
It looks that all other JDBC drivers I tested (Oracle and PostgreSQL) shows Timestamp columns with miliseconds if I use getString(). So I used solution proposed by Todd. I check metatdata and if column is Timestamp then I use getTimestamp() and format it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用 JDBC,则可以使用 rs.getDate(column) 或 rs.getTimestamp(column) 方法,它们分别返回 Date 和 Timestamp 对象。 然后你有一个代表时间的对象,而不是直接表达它的字符串。 对于日期或时间戳,您可以使用 日期formatter 将其格式化为您选择的当时的任何字符串表示形式。
更新(阅读下面的评论后):
如果您使用 getDate(),它仍然适用于时间戳列。 它只会将精度降低到秒。 这样您就不必检查元数据,您只需知道该列是某种时间戳或日期。
If you are using JDBC, you can use the rs.getDate(column) or rs.getTimestamp(column) methods, which return Date and Timestamp objects respectively. Then you have an object representing time, rather than a String expressing it directly. With Date or Timestamp, you can use a date formatter to format it to whatever String representation of that time you choose.
Update (after reading comments below):
If you use getDate(), it will still work for Timestamp columns. It will just reduce the precision down to the second. That way you don't have to check the metadata, you just have to know that the column is some kind of timestamp or date.