진돌.dev
2023.01.12 · 3분 읽기

시간 단위

여진석

개발 중에 timezone 개념과 format 개념이 종종 헷갈렸습니다.

그래서 간단히 정리를 하고자 작성하였습니다.

dayjs 사용법을 설명하는 것이 아닌 time format과 timezone 개념에서 dayjs는 어떻게 사용하나 정도 입니다.

1. 시간대 UTC vs GMT

1.1 GMT

GMT는 그리니치 천문대에서 측정한 평균 태양시를 시계의 시간을 맞춘 것입니다.

그리니치 천문대에서 정오를 기준으로 0입니다.

지구의 자전을 기반으로 정해지기 때문에 정확하지 않습니다. 왜냐하면 지구의 자전은 지구의 핵과 바다, 대기의 움직임에 따라 영향을 받고 있기 때문입니다.

그래서 뒤에서 설명할 UTC와 GMT간의 오차를 맞추기위해 UTC에 윤초를 적용해서 오차를 해소하고 있습니다.

1.2 UTC

UTC는 원자시계에 기반한 시간 측정을 사용합니다.

원자시계란 세슘 원자의 미세한 전자 전이를 측정하여 시간을 정의합니다.

원자시계의 원리는 유튜브등에서 찾아봅시다 ㅎㅎ..

아무튼 그렇기 때문에, 아주 정확합니다.

GMT와 동일하게 본초자오선을 경계로 하는 시간대지만 시간 측정은 원자 시계로 흘러갑니다.

GMT+1 UTC+1 은 즉 같은 timezone 입니다.

2. time format

2.1 ISO 8601

국제 표준화 기구에 의해 1988년 공표 되었습니다.

날짜와 시간의 표현 방식을 명확하게 규정하여, 국제적진 상황에서의 혼란을 방지하고자 개발되었습니다.

흔히 개발할 때 접하는 YYYY.MM.DD 가 여기에 속합니다.

표현 방법

날짜와 시간을 연결할 때는 T 문자를 사용하여 연결합니다.

시간대

  1. UTC

Z를 뒤에 붙이면 UTC 시간을 뜻합니다.

2024-01-18T11:55:48.192831Z

  1. UTC 시간이 아닌 지역별 시간대를 하려면 +HH:MM 을 붙여주면 됩니다.

2024-01-18T20:55:48.192831+09:00

2.2 Unix timestamp

1970년 1월 1일 00:00:00 UTC로부터 경과된 시간을 초 단위로 나타냅니다.

타임존에 영향을 받지 않는 UTC 시간을 기준으로만 합니다.

2.3 HTTP Date

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Date

http 헤더에서 사용되는 날짜와 시간의 표현 방식입니다.

Sun, 06 Nov 1994 08:49:37 GMT

3. dayjs

위에 모든 시간대와 format 타입을 봤으니 이제 dayjs에 적용시켜 봅시다!

dayjs().unix() // 1705581000 unix 시간이 나옴
dayjs().toString() // "Thu, 18 Jan 2024 12:29:55 GMT" HTTP Date 시간이 나옴
dayjs().format() // "2024-01-18T21:31:17+09:00" UTC 타임존이 있는 시간이 나옴
dayjs().ISOString() // UTC ISO 시간이 나옴

개발하면서 다뤄본 format은 위에 정도 밖에 없는 것 같습니다.

위에 format을 조합해서 개발에 적용하면 됩니다.

예를 하나만 들자면 이런식으로 적용하게 될 것 입니다.

서버에서는 unix 타임을 주지만 iso format 으로 보여준다! 라면?

  • unix to iso format
dayjs(unix * 1000).format()

unix 시간은 초단위로 되어있다.

하지만 javascript에서는 밀리초 단위의 unix 시간을 사용하기 때문에 초단위로 바꿔주기 위해 1000을 곱해준다.

마무리

시간대 관련해서 정리를 해보았습니다.

한번 정리를 하니까 말끔히 개념이 정리가 되는 것 같습니다.

여진석

커머스 도메인에서 제품과 팀의 개발 방식을 함께 개선하는 프론트엔드 개발자입니다.