PostgreSQL: epoch 新紀元時間的使用


  新紀元時間 Epoch 是以 1970-01-01 00:00:00 UTC 為標准的時間,將目標時間與 1970-01-01 00:00:00
時間的差值以秒來計算 ,單位是秒,可以是負值; 有些應用會將時間存儲成epoch 時間形式,以提高讀取效率,
下面演示下 pg 中 epoch 時間的使用換算方法。


--1 將 time stamp 時間轉換成 epoch 時間
francs=> select extract(epoch from timestamp without time zone '1970-01-01 01:00:00');
 date_part 
-----------
      3600
(1 row)

francs=> select extract(epoch from timestamp without time zone '1970-01-01 02:00:00');
 date_part 
-----------
      7200
(1 row)

francs=> select extract(epoch from interval '+1 hours');
 date_part 
-----------
      3600
(1 row)


francs=> select extract(epoch from interval '-1 hours');
 date_part 
-----------
     -3600
(1 row)

 

--2 將epoch 時間轉換成  time stamp  時間
francs=> select timestamp without time zone 'epoch' + 3600 * interval '1 second';
      ?column?       
---------------------
 1970-01-01 01:00:00
(1 row)

francs=> select timestamp without time zone 'epoch' + 7200 * interval '1 second';
      ?column?       
---------------------
 1970-01-01 02:00:00
(1 row)


--3 手冊上關於 epoch 的解釋
      For date and timestamp values, the number of seconds since 1970-01-01 00:00:00 UTC (can be negative); 
for interval values, the total number of seconds in the interval 

 

epoch

For date and timestamp values, the number of seconds since 1970-01-01 00:00:00 UTC (can be negative); for interval values, the total number of seconds in the interval

SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08');
Result: 982384720.12

SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
Result: 442800

Here is how you can convert an epoch value back to a time stamp:

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second';

http://www.postgresql.org/docs/9.1/static/functions-datetime.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM