【发布时间】:2016-01-20 13:47:05
【问题描述】:
我必须使用 postgres 数据库 9.4,并且我想使用时间戳。 第一个“问题”是,当我在 postgres 上创建时间戳列时,我不知道它在内部做什么,但是当我查询它时返回 '2010-10-30 00:00:00'
对我来说,时间戳类似于 12569537329(unix 时间戳)。
我说因为是整数或浮点数,计算机处理起来比字符串容易得多,而且每个国家都有自己的时间格式,unix时间戳是一个数字和故事的结尾。
从 php 查询结果是一个字符串,所以我必须做一堆杂耍,并且由于时区、夏令时和其他一些事情可能会出错。
我搜索了很多,但找不到在 postgresql 上使用 unix 时间戳的方法。
有人可以解释一下是否有办法,或者正确的工作方式,并尽可能接近 unix 时间戳。
更新
我发现它会帮助我的一件事是改变 间隔输出。
在 php 中,月份的日期间隔是“月”,因为 pg 在 php 上是“星期一”,它会将星期一理解为星期一。
我认为,如果你不得不玩太多杂耍,那你就做错了。
很高兴 postgres 让我们为会话或永久更改该行为。
因此将intervalstyle 设置为iso_8601 它将作为php iso_8601 工作,并将输出P1M
【问题讨论】:
-
请准确展示您为获得您展示的结果所做的工作。 PG 实际上使用 Unix
gettime()函数作为其timestamps 并且它对时区和 DST 有很好的支持。用例子让你的问题更具体,你就会得到答案。 -
现在这不是一个具体的问题,这是我遇到的很多事情。我记忆犹新的一件事就是这个。我的数据库上有一个日期,2015/08/31 23:00:00 但只是我不知道是否已经使用时区转换,或者是否有人弄乱了代码并使用错误的时区保存。时间戳是绝对的,有了这些信息,我将时区传递给一个 php 函数,并确切地知道如何处理这些信息。人们倾向于喜欢这种格式“2015/08/31 23:00:00”,因为“我可以看懂”,但我更关心是否有可靠的信息。
-
PG 同时具有
timestamp和timestamp with time zone数据类型。秒始终以 UTC 存储,可以在您喜欢的任何时区显示,本地时间将是正确的。第一个与服务器位于同一时区。您描述的问题更多是用户级别的数据管理,而不是与数据库相关的。 -
@Patrick 是的,我正在尝试修复另一个开发人员造成的混乱,并尝试在将来防止。
标签: php postgresql unix-timestamp