Contents

조회 수 11505 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

clang01.jpg



C 언어에서 주로 사용하는 시간 관련 함수 리스트를 소개하고 간단한 예제를 살펴보자.



# 시간 관련 함수

times(2) : 프로세스의 시간을 구한다.

gettimeofday(3) : 시스템의 현재 시간을 얻는다.

settimeofday(3) : 시스템의 현재 시간을 세팅한다.

ctime(3) : 초 단위로된 시간을 년/달/시간의 문자열로 바꾸어준다.

time(3) : 현재 시간을 초 단위 값으로 구한다. 0:00:00을 1970년 1월 1일

localtime(3) : 초 단위의 시간을 월/일/년으로 변경해준다.

gmtime(3) : 초 단위의 시간을 월/일/년으로 변경해준다.

timelocal(3) : tm 자료 구조를 초로 변경한다.

timegm(3) : tm 자료 구조를 초로 변경한다.

mktime(3) : tm * 를 time_t 자료 구조로 변경한다.

asctime(3) : tm 자료 구조를 이용해서 년/월/일을 갖는 문자열로 변경한다.

strftime(3) : 시간을 다양한 포맷으로 변경한다.

stime(2) : 시스템의 시간을 변경한다. 슈퍼 유저만 사용가능.



# 구조체

struct  timeval {
    long    tv_sec;
    long    tv_usec;
};

typedef  long  time_t;

struc  tm {
    int      tm_sec;     /* 초 0 - 59 */
    int      tm_min;    /* 분 0 - 59 */
    int      tm_hour;    /* 시간 0 - 23 */
    int      tm_mday;       /* 날짜 1 - 31 */
    int      tm_mon;    /* 달 0 - 11 */
    int      tm_year;    /* 연도 */
    int      tm_wday;       /* 요일 0(일요일) - 6 */
    int      tm_yday;       /* 연중 몇번째 날 0 - 365 */
    int      tm_isdst;       /* 썸머타임제 적용 여부 */
};




1. 현재 시간 값 구하기


# gettimeofday() 함수를 사용

/*
// #include <sys/time.h>
// int gettimeofday(struct timeval *tv, struct timezone *tz);
*/

#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main()
{
    struct timeval mytime;

    // 현재 시간을 얻어온다.
    gettimeofday(&mytime, NULL);
    printf("%ld:%ld\n", mytime.tv_sec, mytime.tv_usec);

    // 시간을 1시간 뒤로 되돌려서 설정한다.
    mytime.tv_sec -= 3600;
    settimeofday(&mytime, NULL);
    return 0;
}


# time() 함수를 사용

/*
// #include <sys/types.h>
// time_t time(time_t *t);
*/

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

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

    // 현재 TIME 을 구한다.
    time(&the_time);

    printf("현재 시간은 %d 초\n", the_time);

    // 보기좋은 지역시간대로 바꾼다.  
    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);
}




3. 시스템의 시간을 세팅하기


# settimeofday() 함수를 사용

/*
// #include <sys/time.h>
// int settimeofday(const struct timeval *tv , const struct timezone *tz);
*/

#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main()
{
    struct timeval mytime;

    // 현재 시간을 얻어온다.
    gettimeofday(&mytime, NULL);
    printf("%ld:%ld\n", mytime.tv_sec, mytime.tv_usec);

    // 시간을 1시간 뒤로 되돌려서 설정한다.
    mytime.tv_sec -= 3600;
    settimeofday(&mytime, NULL);
    return 0;
}


# stime() 함수를 사용

/*
// #include <unistd.h>
// int stime(const time_t *tp);
*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
    // 사용법 : ./stime "2002 2 16 9 9 9" 
    //                   년  월 일 시 분 초
    char buff[6][5];
    struct tm tm_ptr;
    time_t m_time;

    sscanf(argv[1], "%s %s %s %s %s %s", buff[0], buff[1],
                                         buff[2], buff[3],
                                         buff[4], buff[5]);

    tm_ptr.tm_year  = atoi(buff[0]) - 1900;
    tm_ptr.tm_mon   = atoi(buff[1]) - 1;
    tm_ptr.tm_mday  = atoi(buff[2]);
    tm_ptr.tm_hour  = atoi(buff[3]);
    tm_ptr.tm_min   = atoi(buff[4]);
    tm_ptr.tm_sec   = atoi(buff[5]);
    tm_ptr.tm_isdst = 0;

    m_time = mktime(&tm_ptr);
    stime(&m_time);
}




4. 시간 값을 포맷해서 보여주기


# ctime() 함수를 사용

/*
// #include <time.h>
// char *ctime(const time_t *timep);
*/

#include <time.h>
#include <sys/types.h>

int main()
{
    time_t ti = 1023451234;
    char *test;

    test = ctime(&ti);

    printf("%s", test);
}



# localtime() 함수를 사용

/*
// #include <time.h>
// struct tm *localtime(const time_t *timep);
*/

#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);

}



# gmtime() 함수를 사용

/*
// #include <time.h>
// struct tm *gmtime(const time_t *time);
*/

int main()
{
    int  i;
    time_t  the_time;
    struct  tm  *tm_ptr;

    time(&the_time);
    tm_ptr = gmtime(&the_time);
    printf("현재시간 : %d년 %d월 %d일 %d:%d\n",
        tm_ptr->tm_year + 1900, tm_ptr->tm_mon + 1,
        tm_ptr->tm_mday, tm_ptr->tm_hour,
        tm_ptr->tm_min);
}



# strftime() 함수를 사용

/*
// #include <time.h>
// size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
*/

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

#define  BUFF_SIZE   1204

int main( void)
{
   time_t     tm_time;
   struct tm *st_time;
   char       buff[BUFF_SIZE];

   time( &tm_time);
   st_time = localtime( &tm_time);
   strftime( buff, BUFF_SIZE, "%Y년 %m월 %d일 - %l시 %M분 %S초 %pn", st_time);

   printf( buff);
}



# mktime() 함수를 사용

/*
// #include <time.h>
// time_t mktime(struct tm *timeptr);
*/

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

int main ()
{
    time_t rawtime;
    struct tm * timeinfo;
    int year, month ,day;
    char * weekday[] = { "Sunday", "Monday",
        "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"};

    /* 사용자로 부터 날짜를 입력 받는다. */
    printf ("Enter year: "); scanf ("%d",&year);
    printf ("Enter month: "); scanf ("%d",&month);
    printf ("Enter day: "); scanf ("%d",&day);

    /* rawtime 에 time 함수로 현재 시간 정보로 세팅한 뒤, 
       사용자로 부터 입력받은 데이터로 년/월/일 정보를 수정한다. */
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    timeinfo->tm_year = year - 1900;
    timeinfo->tm_mon = month - 1;
    timeinfo->tm_mday = day;

    /* mktime 함수를 호출하면 년/월/일 데이터에 따라 
       tm_wday 와 tm_yday 를 설정한다. 이 때 리턴되는 time_t 데이터는 사용하지 않는다.*/
    mktime ( timeinfo );

    printf ("That day is a %s.\n", weekday[timeinfo->tm_wday]);

    return 0;
}




5. 예제


과제 #1 (작성중..)

오늘의 날짜를 구하는 프로그램을 작성한다.

목적:

    1. time 관련 함수와 자료 구조에 익숙해진다.

스펙:

    1. 오늘의 날짜와 시간을 구한다.

    2. 오늘이 년중 몇일째인가를 구한다.

    3. 올해는 앞으로 몇일 남아있는가 알아본다.



과제 #2 (파일첨부 : primeNumber2.c)

1000개의 솟수를 구하는 프로그램을 작성해서 시간을 측정한다.

목적:

    1. 알고리즘 선택의 중요성

    2. time 관련 함수와 시스템콜 이용.

스펙:

    1. 1000개의 솟수를 구해서 출력한다.

    2. 솟수를 구하는데 걸리는 시간을 측정한다.

    3. 솟수를 구한 후 현재 시간과 일자를 출력한다.




?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
» Develop [c] 시간 관련 함수 설명과 예제.. file hooni 2003.04.23 11505
744 Develop [c] 스토리지 클래스(변수) hooni 2003.04.23 8197
743 Develop [c] 포인터와 함수포인터에 대해.. hooni 2003.04.23 8019
742 Develop [c] 구조체의 설명과 예제.. hooni 2003.04.23 8372
741 Develop [c] 프로세스간의 통신(파이프) hooni 2003.04.23 6891
740 Develop [jsp] 정적/동적(차트생성) 이미지 전달 file hooni 2003.04.23 7307
739 Develop [c] OpenGL 직사각형(2D) 크기 확대/축소 hooni 2003.04.23 9069
738 Develop [c++] 더블 링크리스트(linked list) 학습용 초간단 단어장 file hooni 2003.04.23 9323
737 Develop [c] 구조체/파일 입출력 프로그램 file hooni 2003.04.23 7063
736 Develop [c] 컴파일러 선행처리기 따라하기.. file hooni 2003.04.23 6681
735 Develop [c] 싱글, 더블 링크리스트(linked list)로 만든 예제.. file hooni 2003.04.23 6737
734 Develop [c] fgets() 함수 사용하기.. hooni 2003.04.23 7818
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 71 Next
/ 71