C++ 날짜와 시간 완벽 가이드: ctime 라이브러리 활용
C++ 표준 라이브러리는 적절한 날짜 타입을 제공하지 않습니다. C++은 날짜와 시간 조작을 위한 구조체와 함수를 C에서 상속받습니다. C++ 프로그램에서 날짜/시간 관련 함수와 구조체에 접근하려면 <ctime> 헤더 파일을 포함해야 합니다.
네 가지 시간 관련 타입이 있습니다: clock_t, time_t, size_t, tm. clock_t, size_t, time_t 타입은 시스템 시간과 날짜를 어떤 정수 형태로 표현할 수 있습니다.
구조체 타입 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; // 일광 절약 시간
}
C 또는 C++에서 날짜와 시간을 다루며 사용하는 주요 함수들입니다. 이 모든 함수는 표준 C 및 C++ 라이브러리의 일부이며, 아래 주어진 C++ 표준 라이브러리 레퍼런스를 통해 상세 내용을 확인할 수 있습니다.
| 번호 | 함수 및 목적 |
| 1 | time_t time(time_t *time); 1970년 1월 1일 이후 경과한 초 단위로 현재 시스템의 캘린더 시간을 반환. 시스템에 시간이 없으면 .1 반환. |
| 2 | char *ctime(const time_t *time); 요일 월 일 시:분:초 년\n\0 형태의 문자열 포인터 반환. |
| 3 | struct tm *localtime(const time_t *time); 로컬 시간을 나타내는 tm 구조체 포인터 반환. |
| 4 | clock_t clock(void); 호출 프로그램이 실행된 시간의 근사값 반환. 시간이 없으면 .1 반환. |
| 5 | char *asctime(const struct tm *time); time이 가리키는 구조체에 저장된 정보를 요일 월 일 시:분:초 년\n\0 형태 문자열로 변환해 포인터 반환. |
| 6 | struct tm *gmtime(const time_t *time); tm 구조체 형태의 시간 포인터 반환. 시간은 협정 세계시(UTC), 즉 그리니치 표준시(GMT)로 표현. |
| 7 | time_t mktime(struct tm *time); time이 가리키는 구조체에서 찾은 시간의 캘린더 시간 상당 값 반환. |
| 8 | double difftime(time_t time2, time_t time1); time1과 time2 사이의 차이를 초 단위로 계산. |
| 9 | size_t strftime(); 날짜와 시간을 특정 형식으로 포맷팅하는 데 사용. |
현재 날짜와 시간
현재 시스템 날짜와 시간을 로컬 시간 또는 협정 세계시(UTC)로 검색하고 싶다고 가정해 봅시다. 이를 달성하는 예제:
Live Demo
#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 현재 시스템 시간 기준 현재 날짜/시간
time_t now = time(0);
// now를 문자열 형태로 변환
char* dt = ctime(&now);
cout << "The local date and time is: " << dt << endl;
// now를 UTC용 tm 구조체로 변환
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "The UTC date and time is:" << dt << endl;
}
위 코드를 컴파일하고 실행하면:
The local date and time is: Sat Jan 8 20:07:41 2011
The UTC date and time is:Sun Jan 9 03:07:41 2011
struct tm을 사용한 시간 포맷팅
tm 구조체는 C 또는 C++에서 날짜와 시간을 다룰 때 매우 중요합니다. 이 구조체는 위에서 언급한 대로 C 구조체 형태로 날짜와 시간을 보유합니다. 대부분의 시간 관련 함수는 tm 구조체를 사용합니다. 다양한 날짜/시간 관련 함수와 tm 구조체를 사용하는 예제:
이 장에서 구조체를 사용하면서, 여러분이 C 구조체와 화살표 -> 연산자를 사용한 구조체 멤버 접근에 대한 기본 이해가 있다고 가정합니다.
Live Demo
#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 현재 시스템 시간 기준 현재 날짜/시간
time_t now = time(0);
cout << "Number of sec since January 1,1970 is:: " << now << endl;
tm *ltm = localtime(&now);
// tm 구조체의 다양한 구성요소 출력
cout << "Year:" << 1900 + ltm->tm_year << endl;
cout << "Month: " << 1 + ltm->tm_mon << endl;
cout << "Day: " << ltm->tm_mday << endl;
cout << "Time: " << 5 + ltm->tm_hour << ":";
cout << 30 + ltm->tm_min << ":";
cout << ltm->tm_sec << endl;
}
위 코드를 컴파일하고 실행하면:
Number of sec since January 1,1970 is:: 1588485717
Year:2020
Month: 5
Day: 3
Time: 11:31:57