본문 바로가기
Database/Postgresql

[DB] Unix time

by laarkjung 2024. 8. 19.

사내에 있는 Table에는 시간을 Unix time으로 정의하고 있다.

지금 근무하고 있는 곳뿐만 아니라 여러 곳에서 Postgresql 뿐만 아니라 사용 중인 거 같다. 

 

Unix time

 

그래서 Unix time은 무엇인지, Unix time을 보기 좋게 하기위해선 어떻게 하면 되는지에 대한 포스팅을 하고자 한다. 

 


 

Unix Time

Unix time은 운영체제에서 시간을 나타내는 여러 방법들 중 하나이다. POSIX 시간이나 Epoch 시간이라고도 부른다.

운영체제를 초기화하거나 시간 관련 세팅을 하지 않았을 때 보통 시간이 1970년 1월 1일 00:00:00 으로 나오는데 Unix time 때문이었다. 

 

Unix 계열의 운영체제는 보통 C를 사용하여 만들어져 있다. 대부분의 32 비트 운영체제에서 시스템 초 시간을 정의할 때 time_t 자료형을 사용하는데 이는 32비트 정수형이라 2038년 1월 19일 새벽 3시가 되면 Overflow가 나 음수로 표현되어서 프로그램 작동에 이상이 생길 수 있다고 한다. 그래서 이땐 모두 64비트 운영체제를 써야 한다고 하네 ㅎㅎ 

 

※ 출처 : https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4_%EC%8B%9C%EA%B0%84

 

유닉스 시간 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 유닉스 시간 10억초 달성 기념 행사.(2001-09-09T01:46:40Z) 덴마크 유닉스 사용자 그룹이 현지 시간 03:46:40에 코펜하겐에서 기념하였다. UNIX 시간(UNIX time)은 시각을 나

ko.wikipedia.org

 


Postgresql에서의 Unix time

Postgresql에서 Unix time을 사람 눈으로 보기 좋게 바꾸기 위한 쿼리를 정리해보려한다. 

SELECT TO_TIMESTAMP(TSTAMP/1000.0) AS TO_TIMESTAMP
FROM TABLE_NAME;

 

TO_TIMESTAMP 함수 

Epoch 시간을 time zone이 있는 timestamp로 변경할 때 사용한다. 

위 예제에서 1000으로 나눈 이유는, TO_TIMESTAMP 함수 매개변수가 초 단위이기 때문이다.

 

TO_CHAR 함수를 사용하여 시간 포맷을 정의할 수도 있다. 

SELECT TO_TIMESTAMP(982384720.12);
-- 2001-02-17 04:38:40.12+00

SELECT TO_CHAR(TO_TIMESTAMP(982384720.12/1000), 'YYYY-MM-DD HH24:MI:DD') AS TIME
FROM TABLE_NAME;
-- 1970-01-12 08:53:04

 

EXTRACT 함수

EXTRACT 함수를 이용하여 날짜와 시간 데이터에서 특정 부분을 추출 할 수 있는 함수이다. 

SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
-- Result: 20

SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
--Result: 21

SELECT EXTRACT(CENTURY FROM DATE '0001-01-01 AD');
-- Result: 1

SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC');
-- Result: -1

SELECT EXTRACT(CENTURY FROM INTERVAL '2001 years');
-- Result: 20

 

 

※ 출처 : https://www.postgresql.org/docs/current/functions-datetime.html