munifico.github.io

munifico's anything page

Follow me on GitHub

날짜, 타임존, 타임스탬프, 유닉스 시간

사실, 우리가 쓴느 그레고리안 달력은 형편없습니다. 지나치게 복잡하고, 시간을 나누는 기준도 모호한 데다가 윤년까지 있습니다. 타임존은 한술 더 뜨죠. 하지만 현실이 그러니 어쩔 수 없이 적응해야 합니다.

우선 단순한 초second부터 시작합니다. 그레고리력은 시간을 지나치게 복잡하게 나눠 놨지만, 초 단위는 이해하기 쉽습니다. 날짜와 시간을 초로 나타내면 단 하나의 숫자가 되므로 컴퓨터 입장에서는 이상적입니다. 하지만 사람과 얘기할 때 초 단위로 얘기하는 건 무리수입니다. “이봐, 1493607600초에 점심 같이 하겠나?” 같이 얘기할 사람은 없겠죠(1493607600초는 2017년 5월 1일 정오입니다). 날짜를 초 단위로 나타낼 수 있다면, 0초는 언제일까요? 예수 탄생일을 생각하는 사람이 있겠지만, 사실은 1970년 1월 1일 0시 0분 0초(UTC)입니다.

이미 알고 있겠지만 세계는 타임존으로 나뉩니다. 어디에 살든 오전 7시는 아침이고 오후 7가 저녁인 건 타임존 때문입니다. 타임존은 상당히 복잡한 문제이며, 서머타임이 결부되면 더 복잡합니다. 필자는 이 책에서 그레고리력과 타임존을 상세히 설명할 생각은 없습니다. 이에 관한 정보가 필요한 독자는 위키백과에 잘 정리된 내용이 있으니 참고하시기 바랍니다. 다만 자바스크립트 Date 객체와 Moment.js를 이해하는데 필요한 기본적인 내용은 다룰 겁니다.

타임존은 모두 UTC(Coordicated universal Time)를 기준으로 한 시차로 나뉩니다. UTC는 때때로 그리니치 표준시, 즉 GMT(Greenwich Mean Time)라고 불리기도 합니다. 예를 들어 필자는 현재 오리건 주에 살고 있는데, 오리건은 태평양 타임존에 속합니다. 태평양 타임존은 UTC보다 7~8시간 뒤에 있습니다. 잠깐, 7~8시간? 무슨 말이죠? 계절에 따라 다릅니다. 여름에는 서머타임이 적용되고 시차는 7시간입니다 .여름이 아닐 때는 8시간의 시차가 적용됩니다. 하지만 여기서 중요한 것은 타임존을 암기하는 것이 아니라, 시차를 어떻게 표현하느냐입니다. 필자가 자바스크립트 터미널을 열고 new Date() 명령을 내리면 다음과 같은 결과가 나옵니다.

Thu Sep 05 2019 10:28:00 GMT+0900 (GMT+09:00)

복잡해 보이지만, 타임존이 UTC로부터의 시차 기준으로도 나오고(GMT+0900) 타임존 이름으로도 나오는 걸 볼 수 있습니다(GMT+09:00).

자바스크립트에서 Date 인스턴스는 모두 유닉스 시간 원점Unix Epoch으로부터 몇 밀리초가 지났는지 나타내는 숫자(유닉스 타임스탬프) 입니다. 자바스크립트는 보통 이 숫자를 사람이 읽기 편한 그레고리력 날짜로 변환합니다. 숫자형 표현이 필요하면 valueOf() 메서드를 쓰면 됩니다.

const d const d = new Date();
console.log(d);                 //2019-09-05T01:30:57.625Z
console.log(d.valueOf());       //1567647057625

이전 : 날짜와 시간
다음 : Date 객체 만들기
목차