我已经从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
转换的时间戳都不匹配实际发送的时间戳
有人可以帮忙吗
阿里夫
答案 0 :(得分:1)
例如,1399586523000时间戳应该是2014年5月8日星期四 下午4:21
假设自1970年1月1日以来的UTC时间戳以毫秒为单位,预期结果不正确,并且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 format表示,而不是用Unix时间戳表示,所以你的时间戳是如何获得的以及它们的确切代码并不明显。