有没有办法在Postgres中更改日期的默认格式?
通常情况下,当我查询Postgres数据库时,日期会显示为yyyy-mm-dd hh:mm:ss + tz,如2011-02-21 11:30:00-05。
但是一个特定的节目日期出来yyyy-mm-dd hh:mm:ss.s,也就是说,没有时区,它显示十分之一秒。
显然有些东西正在改变默认日期格式,但我不知道在哪里或哪里。我不认为它是服务器端配置参数,因为我可以使用不同的程序访问同一个数据库,并获得时区的格式。
我关心,因为除了更改格式之外,它似乎忽略了我的“设置时区”调用。所有时间都来自EST。
其他信息:
如果我写“从sometable选择某个日期”,我会得到“无时区”格式。但如果我写“select to_char(somedate :: timestamptz,'yyyy-mm-dd hh24:mi:ss-tz')”那么时区就像我期望的那样工作。
这对我来说听起来像是将所有时间戳设置为隐式“to_char(date :: timestamp,'yyyy-mm-dd hh24:mi:ss.m')”。但是我无法在文档中找到有关如何执行此操作的内容,也无法找到执行此操作的代码中的任何内容。虽然我不知道该寻找什么,但事实并非如此。
没关系:'(
我发现了我的问题。我以为我正在直接查看从数据库返回的字符串。但我忽略了它正在将其作为时间戳读取,然后将时间戳转换为字符串。这被埋没在一个名为“getString”的函数中,这就是让我失望的东西。我以为它是ResultSet.getString,但它确实是我们自己的同名函数。哎呀。什么白痴写了这个功能?!哦,是我......
感谢所有试图提供帮助的人。我会告诉你每个人为你的麻烦投票。
答案 0 :(得分:2)
我认为表格列的指定方式不同。试试这些变种:
timestamp
timestamp(0) no millis
timestamptz with timezone
timestamptz(0) with timezone, no millis
答案 1 :(得分:2)
您在哪个客户端运行select语句?格式化输出是应用程序的职责,因此在不知道用于显示数据的应用程序的情况下,很难说清楚。
假设您使用的是psql,则可以使用SET
命令更改日期格式:
http://www.postgresql.org/docs/current/static/sql-set.html
这实际上是一种更改配置参数的方法。这里记录了负责格式化数据的那些:
http://www.postgresql.org/docs/current/static/runtime-config-client.html#RUNTIME-CONFIG-CLIENT-FORMAT
答案 2 :(得分:0)
Daniel告诉我将我的发现作为答案发布并接受它来结束这个问题。好。
我发现我看到的日期格式不包含时区并不是直接来自Postgres的日期格式,但是我错过了一些函数调用,它们将传入日期转换为java。 util.Timestamp,然后从java.util.Timestamp到String。正是在从时间戳到字符串的转换中,时区默认为EST。
在我自己卑微的辩护中,我的错误并不像听起来那么愚蠢。 :-0我们在子类中执行查询,将结果读入List,我们这样做是为了允许在输出之前修改查询结果。 (在这种情况下,我们添加了一个从存储列派生的列的列。)然后我们有一组类似于JDBC函数的函数来将数据从List中拉出来,因此调用程序可以轻松地从处理中切换查询直接处理List。当我在解决日期格式问题时,它只是没有注册我,我没有看到“真正的JDBC”,而是“模拟JDBC”调用。