我已经从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时间戳表示的,所以时间戳是如何获得的以及它们到底代表什么并不明显。