gmtime(3)

#include <time.h>

struct tm *gmtime(const time_t *timep);

gmtime(3)함수는 time_t type의 시간을 UTC(Coordinated Universal Time) 시간의 struct tm type으로 변환하는 함수입니다. time_t type은 주로 time(2)함수나 gettimeofday(2)의 struct timeval의 tv_sec에서 얻습니다. 이 함수는 내부적으로 local static sturct tm 변수에 데이터를 저장하고 있기 때문에 multi-thread환경에서는 문제가 발생할 수 있습니다. 또한 다음 gmtime(3)을 호출하면 값이 바뀌므로 다른 변수에 데이터를 복사하거나 gmtime(3)을 다시 호출하기 전에 데이터 처리를 끝내야 합니다. 다양한 환경에서 잘 수행하기 위해서는 thread-safe한 gmtime_r(3)을 사용할 것을 권고합니다.

함수이름인 gmtime(3)은 예전에는 UTC(Coordinated Universal Time) 대신에 국제표준시의 명칭이 GMT(Greenwich Mean Time)이었습니다. 시간 분기점이 영국 런던에 있는 그리니치 천문대를 기준으로 하기 때문에 GMT라고 하였으나, UTC로 변경되었습니다. 그러나 함수의 이름은 변경되지 않았습니다. 따라서 multi-thread환경에서는 gmtime_r(3)을 사용하도록 합니다.

 

struct tm 구조체는 아래와 같은 구조입니다.

struct tm {
    int tm_sec;    /* 초: 0 ~ 59,(60,61윤초)*/
    int tm_min;    /* 분: 0 ~ 59*/
    int tm_hour;   /* 시: 0 ~ 23 */
    int tm_mday;   /* 일: 1 ~ 31 */
    int tm_mon;    /* 월: 0 ~ 11 (따라서 +1해야 함*/
    int tm_year;   /* 년: + 1900을 해야 함*/
    int tm_wday;   /* 요일: 0 ~ 6 */
    int tm_yday;   /* 1월1일부터 경과된 날수: 0 ~ 365 */
    int tm_isdst;  /* daylight적용여부: 0:적용안됨, -값:유효하지 않음 +값:적용시간*/
};

 

파라미터

timep
    - 주로 time(2)함수의 return값이나 gettimeofday(2)의 struct timeval의 tv_sec 등으로 
      초 단위의 시간을 저장한 변수

 

RETURN

NULL아님
    - 정상적으로 변환이 되었으며, 내부적으로 static 변수를 return하므로 gmtime(3)을 
      또 호출할 때까지 유효하며 바로 사용하거나 다른 변수에 복제를 해야 합니다.

    thread-safe한 함수가 아니므로 multi-thread환경에서는 gmtime_r(3)을 사용하도록 합니다.
    

NULL
    - 오류가 발생하였습니다.

 


활용 예제

 

Sample

#include <time.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    time_t t;
    struct tm *gt;

    if((t = time(NULL)) == -1) {
        perror("time() call error");
        return -1;
    }

    if((gt = gmtime(&t)) == NULL) {
        perror("gmtime() call error");
        return -1;
    }

    printf("국제표준시간: %04d-%02d-%02d %02d:%02d:%02d\n", 
        gt->tm_year + 1900, gt->tm_mon + 1, gt->tm_mday, 
        gt->tm_hour, gt->tm_min, gt->tm_sec);

    return 0;
}

 


 

see also : 시간 관련 함수

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag , , ,

댓글을 달아 주세요