프로그래밍

[JavaScript] Date 객체와 UTC/Locale 처리 방법

ohlee52 2024. 11. 16. 22:44
반응형

1. Date 객체의 기본 동작

Date 객체는 기본적으로 컴퓨터의 로컬 시간대를 기준으로 동작합니다.
예를 들어, 한국 표준시(KST, UTC+9) 환경에서 new Date()를 생성하면 현재 로컬 시간 기준의 날짜와 시간을 반환합니다.

 

// 로컬 시간 기준 현재 시간 생성
const now = new Date();
console.log(now); 
// 예: Sat Nov 16 2024 20:30:00 GMT+0900 (KST)
 

2. UTC와 로컬 시간

UTC (Coordinated Universal Time)

UTC는 세계 표준 시간으로, 시간대를 고려하지 않은 시간입니다. JavaScript에서는 toISOString() 메서드를 통해 UTC 시간을 ISO 8601 형식으로 얻을 수 있습니다.

console.log(now.toISOString());
// 예: 2024-11-16T11:30:00.000Z (Z는 UTC임을 나타냄)​

로컬 시간

로컬 시간은 컴퓨터의 시간대 설정을 기준으로 한 시간입니다. toLocaleString() 메서드를 사용하면 로컬 시간으로 포맷된 문자열을 얻을 수 있습니다.

console.log(now.toLocaleString());
// 예: 2024. 11. 16. 오후 8:30:00

3. 시간 문자열 처리

JavaScript에서 Date 객체를 생성할 때 시간 문자열을 인자로 전달하면, 문자열 형식과 내용에 따라 처리 방식이 달라집니다.

(1) UTC 시간 문자열

UTC 시간 문자열(예: 2024-11-16T11:30:00Z)은 UTC로 바로 처리됩니다.

const utcDate = new Date('2024-11-16T11:30:00Z');
console.log(utcDate); 
// Sat Nov 16 2024 20:30:00 GMT+0900 (KST)
console.log(utcDate.toISOString()); 
// 2024-11-16T11:30:00.000Z

 

(2) 시간대가 포함된 문자열

시간대(+09:00 등)가 포함된 문자열은 해당 시간대를 기준으로 UTC로 변환됩니다.

const tzDate = new Date('2024-11-16T20:30:00+09:00');
console.log(tzDate); 
// Sat Nov 16 2024 20:30:00 GMT+0900 (KST)
console.log(tzDate.toISOString());
// 2024-11-16T11:30:00.000Z

(3) 시간대가 없는 ISO 8601 형식

시간대가 명시되지 않은 ISO 8601 형식(예: 2024-11-16T20:30:00)은 UTC 기준으로 처리됩니다.

const noTzDate = new Date('2024-11-16T20:30:00');
console.log(noTzDate); 
// Sun Nov 17 2024 05:30:00 GMT+0900 (KST)
console.log(noTzDate.toISOString());
// 2024-11-16T20:30:00.000Z

(4) 비-ISO 포맷

ISO 포맷이 아닌 문자열(예: 2024-11-16 20:30:00)은 로컬 시간대로 처리됩니다.

const localDate = new Date('2024-11-16 20:30:00');
console.log(localDate); 
// Sat Nov 16 2024 20:30:00 GMT+0900 (KST)
console.log(localDate.toISOString());
// 2024-11-16T11:30:00.000Z

 

4. 타임존 확인

Date 객체의 getTimezoneOffset() 메서드는 현재 컴퓨터의 시간대 오프셋(UTC와의 차이, 분 단위)을 반환합니다.

console.log(new Date().getTimezoneOffset()); 
// -540 (한국 시간은 UTC+9이므로 -540분)

 

5. UTC와 로컬 시간 변환

UTC 시간 → 로컬 시간

toLocaleString() 메서드를 사용하면 UTC 시간을 로컬 시간으로 변환해 표시할 수 있습니다.

const utcTime = new Date('2024-11-16T11:30:00Z');
console.log(utcTime.toLocaleString()); 
// 2024. 11. 16. 오후 8:30:00 (KST)

 

로컬 시간 → UTC 시간

toISOString() 메서드를 사용하면 로컬 시간을 UTC 시간으로 변환해 표시할 수 있습니다.

const localTime = new Date('2024-11-16 20:30:00');
console.log(localTime.toISOString());
// 2024-11-16T11:30:00.000Z
반응형