timezone과 javascript의 Date

J·2023년 12월 31일

javascript

목록 보기
4/6

timezone과 javascript의 Date

지금 재직중인 회사에서 디지털 사이니지를 위한 CMS 시스템을 개발중인데

  1. 정확한 시간에 특정 작업이 이루어져야함
  2. 글로벌 서비스를 위해 local 시간을 지원할 수 있어야 함

이 2가지를 고려해서 시스템을 개발해야한다.

사용자가 원하는 시간에 컨텐츠 재생을 예약할 수 있고, 예약한 시간에 맞춰 컨텐츠를 재생할 수 있어야한다.
정확한 시간을 다루어야하는 서비스는 개발해본적이 없어서 매일 무지성으로 YYYY-MM-DD hh:mm:ss 포맷팅만 써왔었는데 지금 개발중인 서비스는 YYYY-MM-DDTHH:mm:ssZ 이런 형식의 데이터를 사용하는데 뭔지 잘 모르겠어서 공부해보게 되었다.

timezone이란?

timezone은 국가에 의해 법적으로 지정되는 동일한 시간을 따르는 지역을 의미한다.
면적이 넓은 나라는 여러개의 timezone을 사용하기도 한다.

GMT와 UTC

GMT는 Greenwich Mean Time의 약자로 영국 그리니치 천문대를 기준으로 하는 시간대이다. 한국은 GMT +09:00으로 나타낼 수 있다.

UTC는 지구 자전주기의 흐름이 늦어지고 있는 문제를 해결하기 위해 1972년에 세슘 원자의 진동수에 기반한 국제 원자시를 기준으로 다시 지정된 시간대이다.

GMT와 UTC는 시간 차이가 얼마 나지는 않지만 UTC가 좀 더 정확한 시간을 나타내는 표준시이다.

offset

timezone의 시간을 나타내기 위해 표준 시간대에서 시간을 + 또는 -하여 나타낸 것이다.
보통 각 국가에서 사용하는 표준 시간대에 이름을 따로 지정하는데 우리나라는 KST (Korean Standard Time)이라고 나타낸다.

즉, KST = UTC +09:00 = GMT +09:00 이다.

날짜, 시간 표기법들

UNIX 시간

1970년 1월 1일 0시 0분 0초 이후로 경과된 초로 시간을 측정하는것

RFC 3339

인터넷에서 사용할 날짜 및 시간 형식이다.
ISO 8601에서 파생된 규격이며 그레고리력을 사용한다.

ISO-8601

날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다.

rfc 3339와 iso 8601은 모두 날짜와 시간을 온전히 표현하기 위한 규약이지만 표현법이 조금 다르다.
각 표기법이 사용하는 형식의 차이를 아래의 링크에서 확인해볼 수 있다.
https://ijmacd.github.io/rfc3339-iso8601/

javascript의 Date

const date = new Date();

console.log(date); //2023-12-31T08:35:15.763Z
console.log(date.toString()); //Sun Dec 31 2023 17:35:15 GMT+0900 (대한민국 표준시)
console.log(date.toISOString()); //2023-12-31T08:35:15.763Z
console.log(date.toUTCString()); //Sun, 31 Dec 2023 08:35:15 GMT
console.log(date.toLocaleString("kr")); //2023. 12. 31. 오후 5:36:33

date 객체는 내부적으로는 정수값을 가지지만 console에 출력하면 날짜와 시간 정보를 출력한다.

javascript에서 default로 사용하는 날짜, 시간 포맷은 YYYY-MM-DDTHH:mm:ss.sssZ 이다.
여기서 T는 날짜와 시간을 구분하기 위해 사용하고 Z 는 시간대 offset 이고 Z만 쓸 경우에는 UTC를 나타내고 UTC와 시간차를 나타내기 위해 +, -를 붙일 수 있다.

참고

자바스크립트에서 타임존 다루기 (1) - https://meetup.nhncloud.com/posts/125

자바스브립트에서 타임존 다루기 (2) - https://meetup.nhncloud.com/posts/130

RFC 3339 vs ISO 8601 - https://ijmacd.github.io/rfc3339-iso8601/

MDN javascript date - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

RFC 3339 - https://datatracker.ietf.org/doc/html/rfc3339

ISO 8601 - https://www.iso.org/iso-8601-date-and-time-format.html

profile
꾸준한 노력파 개발자의 이모저모

1개의 댓글

comment-user-thumbnail
2024년 1월 2일

오오..! 저도 언젠가 정리해 봐야지 했던 것들인데,
벌써 정리해서 올리셨네요! 👍 나중에 참고하겠습니다!
참고로 아직 개발 단계라고 하던데 javascript에 Temporal이라는 시간을 다루는 새로운 API가 나온다고 하네여!

답글 달기