반응형

localtime(3) 

#include <time.h>

struct tm *localtime(const time_t *timep);

localtime(3)함수는 time_t type의 시간을 지역 시간(locale정보)의 struct tm type으로 변환하는 함수입니다. time_t type은 주로 time(2)함수를 이용하여 얻습니다. 이 함수는 내부적으로 local static sturct tm 변수에 데이터를 저장하고 있기 때문에 multi-thread환경에서는 문제가 발생할 수 있습니다. 또한 다음 localtime(3)을 호출하면 값이 바뀌므로 다른 변수에 데이터를 복사하거나 localtime(3)을 다시 호출하기 전에 데이터 처리를 끝내야 합니다.

 

다양한 환경에서 수행하기 위해서는 가급적 thread-safe한 localtime_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하므로 localtime(3)을 
      또 호출할 때까지 유효하며 바로 사용하거나 다른 변수에 복제를 해야 합니다.

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

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

 


활용 예제

 

Sample

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

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

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

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

    printf("지금시간: %04d-%02d-%02d %02d:%02d:%02d\n", 
        lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, 
        lt->tm_hour, lt->tm_min, lt->tm_sec);

    return 0;
}

 


 

see also : 시간 관련 함수

 

 

 

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,