[TIL] 시간 값의 올바른 저장형식이 있다면 무엇일까?

햄스터아저씨·2022년 2월 12일
0

앱 혹은 서비스에서 시간 값을 어떤 형태로 저장할지 고민해서 알아봤는데, 생각보다 허무했다.
처음부터 표기법에 대한 오해를 검색으로 풀었더라면 고민하지 않아도 되었을텐데 하는 아쉬움이 크다.

수정: 제가 쓴 글보다 퀄리티가 높은 좋은 글이 있어 공유합니다.
https://parksb.github.io/article/39.html

왜 이런 고민을 하게 되었나?

현재 앱을 만들 때 시간값을 long 형태로 저장중인데, 이게 합리적인지 의심이 들어서.
그리고 문득 당연히 표준이 있을 것 같아서.

나는 왜 기존에는 long으로 저장해왔는가?

  1. string 이 더 많은 저장공간을 필요로해서
  2. 글로 표현하는 시간 표현방식은 국가별로 다를텐데, 이게 문제가 되지 않을까 싶어서 -> 내가 한국에서 개발중이라 한국형 시간표기법을 보는게 아닌가 싶어서

Long이 옳은가 String이 옳은가?

우선 둘 다 저장해도 괜찮다.

기본적으로는 String으로 저장하는 편이 좋다
숫자 값 형태로 사용할 일이 더 많다면 Long 형태로 저장해도 된다.

String 시간표현방식이 국가마다 다를까? 표준 방식이 있을텐데?

참고: 위키피디아 ISO 8604

ISO 8601 에 따른 표기방법이 있다.
큰 단위(년도)부터 ~ 작은단위(초) 순으로 나열한다.

# 표준 표기 방법
2022-02-12T11:31:24.286Z

표기의 마지막에 Z는 무슨 의미인가?

TIME ZONE 값이 Zero 라는 의미.

ISO 8601 표준에서 UTC의 오프셋으로써 표현된다.
시간이 UTC인 경우, 시간 뒤에 빈칸없이 Z를 직접 추가해야 한다.
Z는 오프셋이 0인 UTC를 위한 지역 지정자(zone designator)다.
그러므로 "09:30 UTC"는 "09:30Z" 혹은 "0930Z"로 표현된다.
"14:45:15 UTC"는 "14:45:15Z" 혹은 "144515Z"가 될 수 있다.

그러면 타임존에 따른 표시는 어떻게?

UTC에서의 오프셋은 위에서 Z를 붙였던 것과 동일한 방법으로 ±[hh]:[mm], ±[hh][mm], 혹은 ±[hh] 형식의 시간 뒤에 덧붙인다.

# Timezone이 고려된 형태 (한국)
2022-02-12T11:31:24+09:00

만약 글로벌 서비스를 생각한다면, offset을 쓰지 않고 Z 로 저장하는 편이 좋다.

JS에서 ISO 표준 시간 값을 얻는 방법은?

ISO 표준이므로 toISOString 메서드를 사용한다.

new Date().toISOString()
console.log(new Date().toISOString())
// 출력값: '2022-02-12T11:31:24.286Z'
profile
서버도 하고 웹도 하고 시스템이나 인프라나 네트워크나 그냥 다 함.

0개의 댓글