postgresql:时区的数字到时间戳问题



我已经从gmail中提取了一些电子邮件到postgresql中。日期以数字形式存储。一些样本日期是

1399586523000
1399773692000
1400191333000
1400378501000
1400796072000
1401008483000
1401400912000
1401588106000

当我将它们转换为时间戳时

to_timestamp(date/1000) at time zone 'UTC+10' as senttimestamp

问题是时区和电子邮件中的分钟部分都不匹配。我本可以很容易地将时区向前或向后移动以进行调整,但日期的分钟部分也不匹配。我怀疑我可能错误地从数字转换为时间戳

例如,1399586523000时间戳应该是2014年5月8日星期四下午4:21,但当我使用时

to_timestamp(date/1000) at time zone 'UTC+10' as senttimestamp

转换后的时间戳与实际发送的时间戳不匹配

有人能帮吗

Arif

例如,1399586523000时间戳应为2014年5月8日星期四下午4:21

假设UTC时间戳为1970年1月1日以来的毫秒数,则预期结果不正确,PostgreSQL的结果是正确的。

以下是Perl的本地时间:

$ LANG=C TZ=GMT 
 perl -e 'use POSIX; print strftime("%c", localtime(1399586523));'

结果:2014年5月8日星期四22:02:03

$ LANG=C TZ=UTC+10
  perl -e 'use POSIX; print strftime("%c", localtime(1399586523));'

结果:2014年5月8日星期四12:02:03

PostgreSQL:

=> select to_timestamp(1399586523) at time zone 'UTC+10';
      timezone       
---------------------
 2014-05-08 12:02:03
(1 row)

邮件消息中的日期是用RFC-822格式表示的,而不是用Unix时间戳表示的,所以时间戳是如何获得的以及它们到底代表什么并不明显。

最新更新