UTC와 ISO 8601, Javascript Date 객체

UTC와 GMT

협정 세계시(UTC)

  • 1972년 1월 1일부터 시행된 국제 표준시. 즉 전 세계 시간의 기준!!
  • 그레고리력의 표기를 따른다. (그레고리력은 one of 역법체계)

그리니치 평균시(GMT)

  • 협정 세계시의 기준시간대에 속함
    • UTC + 0h에 해당하는 시간대(Time Zone)라는 말
    • 참고로 대한민국은 UTC + 9h의 시간대에 속한다.
  • 따라서 일상에서는 GMT와 UTC를 혼용하는 경우가 많다.
  • 기술적인 표기는 UTC로 한다.

ISO 8601

  • ISO 8601은 날짜와 시간의 표기에 관한 국제 표준 규격이다.
  • 최신 버전인 ISO 8601:2004와 구버전인 ISO 8601:2000, ISO 8601:1988 이 있다.

날짜 표기

  1. 연월일 (year, month, day)
    • YYYY-MM-DD (확장 형식) 또는 YYYYMMDD (기본 형식)으로 표기한다.
      • 예) 1981-02-22 또는 19810222 : 1981년 2월 22일
  1. 연과 연중 일수

    • YYYY-DDD (확장 형식) 또는 YYYYDDD (기본 형식)으로 표기한다.
    • DDD는 연중 날의 번호로 1월 1일이 001이며, 12월 31일은 평년은 365, 윤년은 366이 된다.
      • 예) 1981-053 또는 1981053 : 1981년의 53번 째 날
  2. 연과 주와 주중 일수

    • YYYY-Www-D (확장 형식) 또는 YYYYWwwD (기본 형식)으로 표기한다.
    • ww는 연중 주의 번호로, 해의 첫 주는 01, 마지막 주는 52 또는 53이 된다.
    • 단, 해의 첫 주는 그 해의 첫번째 목요일을 포함한 주로 한다.
    • D는 요일을 나타내며, 월요일이 1, 일요일이 7이다.
      • 예) 1981-W07-7 또는 1981W077 : 1981년의 7번째 주의 일요일

시간 표기

  • 쌍점을 쓴 hh:mm:ss (확장 형식) 또는 hhmmss (기본 형식)을 사용한다.
    • hh는 시를 나타내며 00부터 24까지의 값을 갖는다.
    • mm은 분을 나타내며 00부터 59까지의 값을 갖는다.
    • ss는 초를 나타내며 00부터 59까지의 값을 갖는다.
  • 날짜와 시간을 함께 표기할 때에는, 날짜와 시간 사이에 T를 넣어 표기한다.
    • 예) 1981-02-22T09:00:00 : 1981년 2월 22일 09:00

시간대 표기

  • 시간대를 표기할 때에는 Z 또는 +/- 기호를 사용한다.
  • UTC + 0h 시간대(이하 UTC 시간대)에서는 시각 뒤에 Z를 붙인다.
    • 예) 1981-02-22T09:00Z 또는 19810222T0900Z : UTC 시간대에서의 1981년 2월 22일 오전 9시
  • 이외 시간대에서는 시각 뒤에 +- hh:mm, +- hhmm, +- hh 를 덧붙여 쓴다.
    • 예) 1981-02-22T09:00:00+09:00 : UTC + 9h 시간대에서의 1981년 2월 22일 오전 9시
  • +가 붙으면, UTC의 시각보다 더 "빠르다"는 의미다.
  • -가 붙으면, UTC의 시각보다 더 "느리다"는 의미다.
    • 예) 1981-02-22T09:00+09:00 는 1981-02-22T00:00Z 와 동일하다.
      즉, UTC + 9h 시간대에서는 오전 9시이지만, UTC 시간대에서는 오전 0시이다.

기간의 표기

  • 기간을 나타낼 때에는 시작일시/종료일시로 표기한다.
    • 1981-02-22/2007-09-26
    • 1981-02-22T09:00:00+09:00/2007-09-26T17:00:00+09:00

헷갈리는 Javascript Date 객체 메소드들..

getTimezoneOffset()

  • UTC 기준 시간대와 로컬 시간대의 차이(분)를 구하는 메소드
  • 로컬 시간대가 기준 시간대보다 뒤에 있으면 반환값이 양수이고 앞에 있으면 음수다.
    • 우리나라는 기준 시간대보다 앞에 있다 (+9)
    • 따라서 0-9 = -9
    • (분으로 환산) -9 * 60 = -540
    • 역으로 계산하면 이걸로 기준시간대와 몇시간 차이인지 구할 수 있음!
const x = new Date();
const currentTimeZoneOffsetInHours = -x.getTimezoneOffset() / 60;

console.log(currentTimeZoneOffsetInHours) // 9

getTime()

  • 1970 년 1 월 1 일 00:00:00 UTC와 주어진 날짜 사이의 경과 시간(밀리 초)을 구하는 메소드
  • 기능적으로 valueOf() 메소드와 동일
  • 두 시간 사이의 차이를 구할 때 사용할 수 있다
const a = new Date('2021-12-30 12:00:00');
const b = new Date('2021-12-30 12:10:00');
const mscDiff = b.getTime() - a.getTime();
const secDiff = mscDiff / 1000;
const minDiff = secDiff / 60;

console.log(mscDiff) // 밀리초 차이 : 600000
console.log(secDiff) // 초 차이 : 600
console.log(minDiff) // 분 차이 : 10

좋은 웹페이지 즐겨찾기