Contents

조회 수 11518 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
1173 System/OS 해커스랩 깨기.. 후후.. ㅋㅋ file hooni 2013.04.23 18410
1172 Etc 플라스터(Plaster) 수업 내용 secret hooni 2016.05.24 0
1171 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16384
1170 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21243
1169 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16484
1168 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 10954
1167 Etc 티스토리 테이블 html,css 구문 hooni 2013.11.03 15943
1166 System/OS 콘솔에서 패스워드 걸린 zip 압축하는 명령 hooni 2018.03.02 927
1165 System/OS 컴파일러 수업 자료(교재 : 컴파일러 입문) file hooni 2003.04.23 21965
1164 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 724
1163 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 966
1162 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98