Contents

조회 수 11524 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
97 Develop [vim] vim 명령으로 &#65279; 문자 제거하기 (remove 65279 bomb) hooni 2021.02.03 1168
96 Develop [ios] Facebook SDK 로그인 설명 file hooni 2017.04.19 1164
95 Develop [android] Calling activity function from separate class hooni 2016.11.15 1161
94 Develop [ios] Objective-C Types & Storage Capacity hooni 2015.07.22 1159
93 Develop macOS에 node, npm 설치하기 (homebrew) file hooni 2021.11.06 1149
92 Develop GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스 file hooni 2014.10.14 1146
91 Develop [coding] Find all anagrams in a string hooni 2017.06.27 1146
90 Develop [ios] UIView 계층구조 hooni 2015.01.03 1130
89 Develop [maven] Mac OS에 메이븐(maven) 설치하기 file hooni 2015.01.21 1112
88 Develop [js] 문자열에서 숫자만 걸러내기 (jQuery 안쓰고 정규표현식) hooni 2017.12.14 1108
87 Develop [ios] FlckrFeed Example App (Swift) file hooni 2016.11.27 1079
86 Develop [ios] 동영상 플레이어 샘플 (for Local File) file hooni 2017.02.07 1077
Board Pagination Prev 1 ... 58 59 60 61 62 63 64 65 66 67 ... 71 Next
/ 71