Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

과거의 내가 미래의 나에게

js 시간 본문

js 이론

js 시간

양바삭 2023. 8. 21. 21:49

요새 특정 기간에 대한 통계를 다루는 작업을 하는데 기간을 다룰 때 js의 시간 개념이 부족하다는 것을 깨닫고 관련된 내용을 학습하고 정리해보려고 한다.



GMT
Greenwich Mean Time이란 뜻으로 그리니치의 평균 시간이라 해석한다. 영국에 위치한 그리니치 천문대를 기준으로 경도를 나누는 시간대인데, 태양의 움직임을 바탕으로 측정한 평균 태양시이다. 영국을 기준으로 한 태양시이기에 영국보다 동쪽에 있는 지역일 수록 해가 더 일찍 뜨고, 서쪽에 있을 수록 해가 더 늦게 뜬다. 이와 같은 경우 영국의 시간대인 GMT에 +01 혹은 -01 과 같이 시차를 붙여서 표현하게 된다. 

한국은 영국보다 시간대가 9시간을 앞서고 있기에 +09가 붙는다.

그리니치 천문대


그러나 태양시는 지구 자전속도에 영향을 받기 때문에 상대적으로 부정확한 시간이기에 국제 표준으로 삼고 있지는 않다. 

그렇기에 사람들은 연구와 합의를 통해 절대 변하지 않는 UTC라는 시간대를 만들어 낸다.


UTC
Coordinated Universal Time(영어권 약자)이란 뜻으로 '맞추다, 조화시키다' 뜻의 Coordinate와 '보편적인'의 뜻인 Univeral으로 직역하면 모두가 함께 동의한 보편적인 시간대이다. 즉 세계 협정시라 할 수 있겠다.

이름과 약자의 순서가 다른건 프랑스어 약자TUC(Temps Universel Coordonn)와 영어권의 약자CUT(Coordinated Universal Time)가 조금씩 다른데 두 약자에 모두 U,T,C라는 언어가 포함되어있기에 UTC라는 약어로 합의했다고 한다. 

1972년부터 시행된 국제 표준시로 국제 원자시에다가 윤초를 추가함으로써 시간 보정을 하여 외부에 영향 받지 않고 변함없는 시간대를 마련할 수 있던 것이다. 

< 국제 원자시와 윤초 보정  >
국제 원자시는 세계 각지의 원자시계(아주 정밀한 시간을 재는 시계)에서 잰 시간 정보를 보정하고 모아 추가 조정한 시간이다. 
윤초는 협정 세계시와 실제 지구 자전공전 속도를 기준으로 한 태양시의 차이로 인해 발생한 오차를 보정하기 위해 추가하는 초로 세계협정시와 세계시의 차이가 1초 이내로 되도록 보정하는 것이다.

UTC와 GMT는 단지 초를 정의하는 방식만 다를 뿐 시간대를 나누는 것은 동일하므로 UTC 역시 영국이 포함된 시간대를 기준으로 삼는다. 따라서 실제로는 두 시간대의 값은 차이가 거의 없지만 UTC를 현재 세계 협정시로 사용하고 있기에 GMT보단 UTC를 사용하는 것이 낫다.

UTC 시간대는 "1981-02-22T09:00Z"와 같은 형태로 그 끝에 Z가 붙는다. Z는 Zulu Time의 약자로 UTC 시간을 표기하는 표현법에서 비롯되었다 한다. 

https://www.bbc.com/korean/articles/c517gz53l0po < 국제 원자시가 만들어지는 과정을 적은 기사. 재밌었다



 
Unix Time Stamp
컴퓨터에서 사용하는 시간 표현 방식으로, 1970년 1월 1일 00:00:00 UTC부터 경과한 시간을 초로 환산하여 정수로 나타낸 것이다. UTC 시간대를 기준으로 했기에 전 세계 컴퓨터에서 일관된 시간을 표기할 수 있으며 정수로 표현되기에 시간 간격을 계산하기가 쉽다.
각종 컴퓨터 시스템, DBMS에서 많이 사용되는 시간 표기 방법으로 실제로 DB에 시간대를 저장할 때는 UTC로 해야 시차가 달라지더라도 그 시간이 언제나 동일하게 표출될 것이다.
Unix Time은 UTC 기준이기에 로컬시간대로 사용하기 위해서는 추가 변환 작업을 해주어야 한다.



ISO 8601
날짜와 시간 관련된 데이터 교환을 다루는 국제 표준으로써 국제 표준화 기구인 ISO에 의해 공포되었다. 날짜와 시간의 숫자 표현은 나라마다 다 다르기에 이를 합의하기 위함이다. 아래에는 연월일과 시간대만을 정리해두었고 규격에 대해 좀 더 자세히 알고 싶으면 해당 주소를 읽어보는 것이 좋겠다.


1. 연월일과 시간의 표기
연월일의 표기는 YYYY-MM-DD(확장 형식) 또는 YYYYMMDD(기본 형식)으로 표기한다.
시간의 표기는 쌍점을 쓴 hh:mm:ss(확장 형식) 또는 hhmmss(기본형식)을 사용한다. 


2. 시간대 표기
UTC의 경우 "2023-08-01T09:00Z"의 형태로 끝에 Z를 붙여서 UTC 시간대라는 것을 나타낸다.
UTC 이외의 경우 "2023-08-01T09:00+09:00"와 같이 시각 뒤에 ±hh:mm, ±hhmm, ±hh를 덧붙여 쓴다

 

 


Date 객체 생성

New Date()를 이용해서 날짜를 생성할 수 있다. 파라미터로는 빈 값, UNIX 타임스탬프 값, 타임스탬프 문자열, 개별 날짜 및 시간 구성 요소를 적을 수 있다.

 

1. 빈 값

현지 시간으로 생성 순간의 날짜와 시간을 나타내는 객체를 생성한다.

 

2. UNIX 타임스탬프 값

- new Date(1693115663461) // Sun Aug 27 2023 14:54:42 GMT+0900

 

3. 타임스탬프 문자열

 Date.parse() 메서드가 인식할 수 있는 형식(ISO8601의 특정 버전 혹은 IETF 호환 RFC 2822 타임스탬프)으로 나타낸 날짜 문자열이다. 참고로 RFC 2822 형식 문자열은 관례적으로만 지원하는 것이며 ISO 8601에서 Z가 있으면 UTC 기준, 없으면 현지 시각 기준으로 나타낸다. 하지만 Z가 없어도 시간 정보가 없다면 UTC로 간주한다.

 

4. 개별 날짜 및 시간 구성 요소

year, month, date, hours, minutes, seconeds, ms의 순서로 매개 변수를 넣을 수 있다. year과 month 까지는 필수 입력 정보이다.

 

 

 

Date 객체 출력

Date 객체의 일부 메서드는 UTC 값을 기반으로 하고 일부는 현지 시각 값을 기반으로 반환하므로 주의가 필요하다. 

new Date()를 통해 객체를 출력할 때는 파라미터에 UTC로 간주되는 값이 들어가면 new Date에 의하여 현지 시각에 맞게끔 조정되어 출력될 것이고(우리 기준 +09) 만약 UTC로 간주되지 않는 값이 들어가면 현지 시각 기준으로 해석되기에 출력될 때 +09는 되지 않은채 그대로 나타날 것이다.

 

1. UNIX 타임 스탬프를 반환하는 메서드

- getTime()

- valueOf()

 

2. UTC 기반의 값을 반환하는 메서드

- getUTCFullYear(Month, Date,...,Milliseconds)

- toISOString()

- toJSON()

- toGMTString()

- toUTCString()

 

3. 현지 시각 기반의 값을 반환하는 메서드

- getFullYear(Month, Date,...,Milliseconds)

- toDateString()

- toLocaleString()

- toLocaleDateString()

- toLocaleTimeString()

- toTimeString()

 

 

 

 


참고 문서

 

'js 이론' 카테고리의 다른 글

JS 배열 함수 정리  (0) 2023.11.26
구조 분해 할당 구문  (0) 2023.08.31
딥다이브 :: 생성자 함수에 의한 객체 생성  (0) 2023.02.02
딥다이브 :: property attribute  (0) 2023.02.01
딥다이브 :: let, const  (0) 2023.01.24
Comments