Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=localtime">localtime</a>(3)

1장. localtime(3)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 예제


1.1절. 사용법

#include <time.h>

struct tm *localtime(const time_t *timep);
		


1.2절. 설명

timep 를 입력받아서 유저 시스템의 time zone 에 맞도록 시간 값을 돌려준다. 시간 값은 tm 구조체에 들어간다. tm 구조체는 다음과 같은 멤버 변수들을 포함한다.

struct tm
{
        int     tm_sec;         /* 초 */ 
        int     tm_min;         /* 분 */
        int     tm_hour;        /* 시간 */
        int     tm_mday;        /* 일/월 */
        int     tm_mon;         /* 월 */
        int     tm_year;        /* 년 */
        int     tm_wday;        /* 일/주 */
        int     tm_yday;        /* 일/년 */
        int     tm_isdst;       /* 섬마타임 */
};
		
월은 0부터 시작한다. 그러므로 프로그램상에서 제대로 표현하려면 +1을 해주어야 한다. 또한 년의 경우에는 +1900 해주어야 한다.

아규먼트로 들어가는 timeptr 은 1970년 1월 1일 00:00:00 부터의 계산하고픈 때까지의 시간의 차이를 초로 환산한 값이다.


1.3절. 반환값

tm 구조체를 넘겨준다.


1.4절. 예제

#include <time.h>

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void swaptime(time_t, char *);
int main()
{
    char buffer[255];
    time_t the_time;

    // time 함수를 이용해서 현재 시간을 얻어온다. 
    time(&the_time);

    memset(buffer, 0x00, 255);
    swaptime(the_time, buffer);
    printf("%s\n", buffer);
}

void swaptime(time_t org_time, char *time_str)
{
    struct tm *tm_ptr;
    tm_ptr = localtime(&org_time);

    sprintf(time_str, "%d-%d-%d %d:%d:%d", tm_ptr->tm_year+1900,
                    tm_ptr->tm_mon+1,
                    tm_ptr->tm_mday,
                    tm_ptr->tm_hour,
                    tm_ptr->tm_min,
                    tm_ptr->tm_sec);

}
		
위 프로그램을 컴파일한다음 실행시키면 다음과 같은 결과를 보여줄것이다.
[root@localhost test]# ./localtime
2002-8-23 18:18:32
Sun 5.9 에서 작업시 localtime 에 초를 다르게 해서 연달아 호출 할 경우 마지막에 호출한 함수의 초 값으로 2개의 tm 구조체 값이 같아짐
#include    
#include    
#include    
#include    

int main(void)
{
    struct tm       *ctp;
    struct tm       *ltp;
    struct timeval  tp;
    int             rtn;
    long            lSec;
    long            lSecDiff;


    lSecDiff    =   3600 * 13;

    rtn = gettimeofday(&tp, NULL);
    if (rtn != -1)
    {
        lSec    =   tp.tv_sec   -    lSecDiff ;
        printf("lSecDiff =[%ld]tp.tv_sec   =   [%ld] lSec = [%ld]\n",lSecDiff ,tp.tv_sec, lSec   );
        ctp = localtime(&lSec);
        printf("CTP: %02d:%02d:%02d.%06d\n",ctp->tm_hour, ctp->tm_min, ctp->tm_sec, tp.tv_usec);

        ltp = localtime(&tp.tv_sec );
        printf("LTP: %02d:%02d:%02d.%06d\n",ltp->tm_hour, ltp->tm_min, ltp->tm_sec, tp.tv_usec);
    }

    rtn = gettimeofday(&tp, NULL);
    if (rtn != -1)
    {
        lSec    =   tp.tv_sec   -    lSecDiff ;
        printf("lSecDiff =[%ld]tp.tv_sec   =   [%ld] lSec = [%ld]\n",lSecDiff ,tp.tv_sec, lSec   );

        ctp     = localtime(&lSec);
        ltp = localtime(&tp.tv_sec );
        printf("CTP: %02d:%02d:%02d.%06d\n",ctp->tm_hour, ctp->tm_min, ctp->tm_sec, tp.tv_usec);
        printf("LTP: %02d:%02d:%02d.%06d\n",ltp->tm_hour, ltp->tm_min, ltp->tm_sec, tp.tv_usec);
    }

    return  0;
}
위 예제의 결과는 다음과 같다
lSecDiff =[46800]tp.tv_sec   =   [1212155871] lSec = [1212109071]
CTP: 09:57:51.828102
LTP: 22:57:51.828102
lSecDiff =[46800]tp.tv_sec   =   [1212155871] lSec = [1212109071]
CTP: 22:57:51.829294
LTP: 22:57:51.829294

CategoryC