ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C Language] 27. 시간함수 - C 언어
    CSE/C Language 2015. 7. 16. 15:40

    1. 시간함수의 유용성

     시간함수는 여러 가지로 요긴한 함수이다. 난수를 발생시킬 때 시간을 seed로 사용하면 결코 같은 순서로 난수를 발생시키지 않으며, 프로그램 중 오류 발생 시 그 시각을 로그에 저장하면 나중에 오류 분석에 유용하게 쓰일 수 있다. 또한, 특정한 시간에 되었을 때 어떠한 함수를 실행시켜야 한다면 역시 시간함수는 유용하게 사용될 수 있다.




    2. time.h

     시간함수에 대한 원형은 time.h에 선언되어 있으며, 기본적으로 1970년 1월 1일 자정 이후로 경과한 시간을 초로 환산한 값이나 tm 구조체를 사용하여 시 간을 구한다.


     먼저 tm 구조체를 살펴보도록 하자.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct tm
    {
        int    tm_sec;        /* Seconds: 0-59 (K&R says 0-61?) */
        int    tm_min;        /* Minutes: 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 Jan. 1: 0-365 */
        int    tm_isdst;    /* +1 Daylight Savings Time, 0 No DST,
                     * -1 don't know */
    };
    cs




     위 구조체 tm에 대한 몇 가지 주의사항을 아래 살펴보도록 하자.

      - 시, 분, 초는 0 부터 시작한다. (60초 단위 생성시 + 1 해줘서 구해야함)

      - 일은 1 부터 시작한다.

      - 월은 0 부터 시작한다.

      - 년은 1900 년 이후의 연도이므로 tm_year 에 74가 저장되어 있다면 74년이 아니라, 1974년이 된다.

      - 요일은 0 부터 시작한다. 일요일은 0이며 월요일은 1 이다.





    3. 여러 가지 시간함수

     아래 예제를 통해 직접 시간함수를 적용해 보도록 하자.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    /*
     * timeExam.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
    #include <time.h>
     
    int main(void) {
     
        int i;
        time_t start, end, now;
        struct tm *timep;
        char buff[512];
        double diff;
     
        start = time(NULL);
        time(&now);
     
        timep = localtime(&now);
        printf("%d/%d/%d\n"1900 + timep->tm_year, timep->tm_mon + 1,
                timep->tm_mday);
     
        puts(asctime(timep));
        puts(ctime(&now));
     
        strftime(buff, sizeof(buff), "%Y:%m:%d", timep);
        puts(buff);
     
        for (i = 0; i < 1000000000; i++)
            ;
     
        end = time(NULL);
        diff = difftime(end, start);
     
        printf("프로그램 경과 시간: %.2f초", diff);
     
        return 0;
    }
     
    cs






    댓글

Designed by Tistory.