Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 시스템 날짜와 시간 출력하기

C++ 표준 라이브러리는 별도의 날짜 타입을 제공하지 않습니다. 대신 C++은 C 언어로부터 날짜와 시간을 다루는 구조체와 함수들을 그대로 물려받아 사용합니다. 따라서 날짜 및 시간 관련 함수와 구조체에 접근하려면 프로그램 상단에 <ctime> 헤더 파일을 포함시켜야 합니다.

시간 관련 주요 데이터 타입

C++에서 시간과 관련된 대표적인 타입은 네 가지입니다.

  • clock_t
  • time_t
  • size_t
  • tm

이 중 clock_t, size_t, time_t는 시스템의 시간과 날짜를 일종의 정수 형태로 표현할 수 있습니다.

tm 구조체

tm 구조체는 날짜와 시간 정보를 C 구조체 형태로 저장하며, 다음과 같은 멤버 변수들을 가지고 있습니다.

struct tm {
    int tm_sec;   // 분 단위 내의 초 (0 ~ 61)
    int tm_min;   // 시간 단위 내의 분 (0 ~ 59)
    int tm_hour;  // 하루 기준 시간 (0 ~ 24)
    int tm_mday;  // 월 단위 일자 (1 ~ 31)
    int tm_mon;   // 연 단위 월 (0 ~ 11)
    int tm_year;  // 1900년 이후 경과한 연도
    int tm_wday;  // 일요일 이후 경과한 요일 수
    int tm_yday;  // 1월 1일 이후 경과한 일수
    int tm_isdst; // 서머타임 적용 여부
}

참고로 tm_mon은 0부터 시작하기 때문에 실제 월을 표시할 때는 1을 더해주어야 하며, tm_year 역시 1900년을 기준으로 한 값이므로 실제 연도를 구하려면 1900을 더해야 합니다.

현재 시스템 시간 조회 예제

현재 시스템의 날짜와 시간을 지역 시간(Local Time) 또는 협정 세계시(UTC) 형태로 가져오려면 아래 예제처럼 작성할 수 있습니다.

#include <iostream>
#include <ctime>
using namespace std;

int main() {
    // 현재 시스템 기준의 현재 날짜/시간 가져오기
    time_t now = time(0);

    // time_t 값을 문자열 형태로 변환
    char* dt = ctime(&now);
    cout << "지역 날짜 및 시간: " << dt << endl;

    // UTC 기준으로 변환하기 위해 tm 구조체 사용
    tm *gmtm = gmtime(&now);
    dt = asctime(gmtm);
    cout << "UTC 날짜 및 시간: " << dt << endl;

    return 0;
}

실행 결과

지역 날짜 및 시간: Fri Mar 22 13:07:39 2019
UTC 날짜 및 시간: Fri Mar 22 07:37:39 2019

코드 설명

위 예제의 동작 흐름은 다음과 같습니다.

  1. time(0) 함수를 호출하여 현재 시스템 시간을 time_t 타입으로 가져옵니다.
  2. ctime() 함수는 time_t 값을 사람이 읽을 수 있는 문자열로 변환합니다.
  3. gmtime() 함수는 time_t 값을 UTC 기준의 tm 구조체로 변환합니다.
  4. asctime() 함수는 tm 구조체를 문자열 형태로 변환합니다.

실행 결과를 보면 지역 시간과 UTC 시간 사이에 시차가 존재하는 것을 확인할 수 있습니다. 이는 시스템이 설정된 타임존(예: 한국 표준시 KST는 UTC보다 9시간 빠름)에 따라 지역 시간이 계산되기 때문입니다.