
물리량
시간은 물리학 관점에서 시각 간 간격을 표현하는 단위를 뜻함
예) 어제보다 오늘은 24시간이 더 흘렀다
위치
시간은 위치에 따라 다르게 표현됨
예) 미국과 한국은 시차가 존재
천문 현상
지구자전속도의 불규칙성, 지구 자전주기와 공전주기로 시간 보정 필요
예) 윤초, 윤달, 윤년
문화
문화에 따라 시간표현이 다름
예) 태양력 태음력 이슬람력
역사
역사적 사건에 의해 시간은 다르게 표현
예) 1592년 10월 4일 다음날? 그레고리력으로 인해 날짜 삭제 => 15일
사회
사회적 제도에 의해 시간은 변함
예) 일광 시간 절약제(써머타임)
협정 세계시(UTC)
원자 시계와 윤초 보정을 기반으로 표준화한 시각
모든 시간대는 UTC+0을 기준으로 환산, 대한민국은 UTC+9
예) 영국(UTC+0)이 오전 1시면 대한민국은 오전 10시
표기법은 ISO 8601을 따름
하드웨어가 시스템 클럭을 이용
특정 시각(Epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현
시스템 시간을 값으로 표현한 것
타임스탬프는 운영체제마다 기준 시간과 단위가 다를 수 있음
유닉스 계열 운영체제에서 시간을 표시하는 방법은 Unix Time이라고 부름
RTC(Real Time Clock)이라는 모듈을 사용
이것은 메인보드에 붙어있어 전원을 끄더라도 계속 작동
RTC는 카운터 회로를 통해 클럭을 발생
=> 결정 진동자가 만드는 정확한 주파수를 사용
1클럭에 32.768kHz이 발생, 왜 이 주파수일까?
1970년 1월 1일 0시 0분 0초가 기준 시각
기준을 잡은 이유는 개발자 데니스 리치 자기 마음대로 지은 것
1970년 이전 시간은 음수 표현
초 단위로 시간 증가
시스템 시간을 네트워크 타임 프로토콜을 통해 동기화
NTP 서버에 네트워크 요청을 하여 현재 시간을 받음
이 서버는 Stratum이라는 계층으로 이루어져 있음
최상위 계층을 PRC(Primary Reference Clock)이라 부름
시간대와 지역, 문화, 사회를 고려하지 않고 순수하게 시간을 기록해야 하는 경우
ex) 생일, 기업 설립일, 기념일 등
역사, 사회, 문화를 고려하여 사용자가 이용한 시각을 정확히 알아야 할 때 사용
UI에 표시되는 사용자 시간을 표시할 때 사용
ex) 결제 시각, 푸시 알림 시간, UI 시각 표시, 캘린더
현실 세계에 이벤트가 발생되면 업데이트가 됨
표기법은 대륙/도시 형태를 따름
ZoneId라고 부름
역사, 사회, 문화와 관계없이 사건이 발생한 시각만 고려할 때 사용
ex) 로깅, 감사, 시계열 데이터(주식)
간단하게 사용하면 Date 객체로 표현 가능
유명했던 moment.js는 Deprecated되어 대체로서 date-fns, luxon을 사용 가능
😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.
관련 레퍼런스
[이선협 강사님 글]
https://kciter.so/posts/deep-dice-into-datetime