공부/C++

[ C++ ] Time.h

haena02 2022. 11. 13. 16:51
반응형

1. time_t

time_t는 time 헤더에서 시간을 잘 다루기 위해서 만들어진 데이터 타입이다.

일반적으로 1970년 1월 1일 00:00 UTC (유닉스 타임)이후 경과된 초(정수값)를 나타낸다.

time() 이라는 함수의 반환형이다.

 

2. tm 구조체

 

tm구조체는 시간을 우리가 알아볼 수 있게 세세하게 변수로 나누어서 만들어져 있는 구조체 이다.

time_t는 사람이 알아보기 힘드므로 tm 구조체를 활요하면된다. 

 

struct tm
{
    int tm_sec;   // seconds after the minute - [0, 60] including leap second
    int tm_min;   // minutes after the hour - [0, 59]
    int tm_hour;  // hours since midnight - [0, 23]
    int tm_mday;  // day of the month - [1, 31]
    int tm_mon;   // months since January - [0, 11]
    int tm_year;  // years since 1900
    int tm_wday;  // days since Sunday - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
};

주석에 개구간으로 표시되는 숫자의 범위가 적혀있다.

 

주의해야할 점은 

  • 월을 나타내는 tm_mon은 0에서부터 11까지라는 것이다. 그래서 우리는 +1을 해서 사용해야한다.
  • 연도를 나타내는 tm_year을 보면  years since 1900이라고 나와있다. 그래서 우리는 +1900를 더해서 사용해야한다. 

 

 

3. time() 

함수의 원형은 아래와 같다.

time_t time(time_t *pTime)

 

함수를 사용하는 방법은 두가지가 존재한다.

매개변수에 NULL을 집어 넣어서 반환형으로 시간을 받는 방법과

매개변수 time_t*에 변수 time_t 를 참조하여 값을 얻어오는 방법이 있다.

 

#include<stdio.h>
#include<time.h>
 
int main(void) {
 
    time_t t1;
    time(&t1);
    printf("%lld\n", t1);
 
    time_t t2;
    t2 = time(NULL);
    printf("%lld\n", t2);
 
    return 0;
}

하지만 이렇게 하면 우리가 알아보기 힘든 time_t 형태로 나오기 떄문에 알아보기 힘들다.

 

4. localtime() 

함수의 원형은 아래와 같다.

struct tm* localtime(const time_t* pTime);

이 함수를 쓰면 tm 구조체에 보기좋게 정리가 된다. 

하지만 귀찮은 점은 하나하나 변수로 옮겨줘야한다는 것이다. 

 

5. ctime(), asctime()

 

우리가 위에서 시간을 다루는 time_t 데이터 타입과 구조체 tm에 대해서 알아보았는데

ctime, asctime 함수는 그 시간들을 미리 문자열로 만들어 놓은 함수 이다.

 

함수의 원형은 아래와 같다

 

char* ctime(const time_t* pTime);

char* asctime(const struct tm* pTm);

위 함수 두개는 매개변수는 각각 다른 형태의 시간을 받지만 반환형은 같다.

 

반환형 : "Www Mmm dd hh:mm:ss yyyy"

반응형

'공부 > C++' 카테고리의 다른 글

[ C++ ] STL 정리  (0) 2022.11.18