C언어 시간 관련 함수(상호 Type 교환)

visual studio c/c++, gcc,c++ C/C++언어

이 글에서는 Linux C언어 시간 다루는 함수에 대한 내용을 소개합니다.

입력 Type변환 함수 출력 Type
NULLtime_t time (time_t *__timer)
세계표준시(UTC)1970년1월1일0시0분0초 이후의 지금 현재까지의 초 수를 취득합니다.
time_t
time_tchar *ctime (const time_t *__timer)char*
time_tstruct tm *gmtime (const time_t *__timer)
struct tm *localtime (const time_t *__timer)
struct tm
struct tmtime_t mktime (struct tm *__tp)time_t
/usr/include/time.h

환경 정보

위 내용의 조사 환경은 다음과 같습니다.

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ uname -a
Linux ip-172-31-20-195.us-east-2.compute.internal 3.10.0-1160.25.1.el7.x86_64 #1 SMP Wed Apr 28 21:49:45 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
... 중간생략 ...
$ gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
... 중간생략 ...

time함수,localtime함수 사용 연습

연습용으로 다음과 같은 소스를 작성해 저장합니다.

$ vi timetest01.c
#include <stdio.h>
#include <time.h>

int main()
{
    time_t fullsec_t = NULL;
    fullsec_t = time(NULL);

    if (fullsec_t == (time_t)-1) {
        printf("Failed to get the current time.\n");
        return 1;
    }

    struct tm *local_tm = localtime(&fullsec_t);

    if (local_tm == NULL) {
        printf("Failed to convert time to local time.\n");
        return 1;
    }

    printf("%04d/", local_tm->tm_year + 1900);
    printf("%02d/", local_tm->tm_mon + 1);
    printf("%02d ", local_tm->tm_mday);
    printf("%02d:", local_tm->tm_hour);
    printf("%02d:", local_tm->tm_min);
    printf("%02d ", local_tm->tm_sec);
    printf("\n");
}

소스 설명

  1. time
    세계표준시(UTC)1970년1월1일0시0분0초 이후의 지금 현재까지의 초 수를 취득합니다.
    OS의 timezone과 현재 시각은 다음 명령을 사용해 확인 할 수 있습니다.
$ date
Sat May 15 14:55:58 UTC 2021
$ ls -la /etc/localtime
lrwxrwxrwx. 1 root root 25 Sep 23 2019 /etc/localtime -> ../usr/share/zoneinfo/UTC
  1. timezone변경은 [타임 존 KST(Korea Standard Time)로 변경하기] 를 참조 하십시오.
  2. localtime() 함수를 사용해 위 1. 에서 구한 초 수를 아래와 같은 struct tm으로 변환합니다.
struct tm {
    int tm_sec;    /* 초 0~60/61 */
    int tm_min;    /* 분 0~59 */
    int tm_hour;   /* 시간 0~23 */
    int tm_mday;   /* 일 1~31 */
    int tm_mon;    /* 1월부터 월수 0~11 */
    int tm_year;   /* 1900년부터 연수 */
    int tm_wday;   /* 일요일부터 일수 0~6 */
    int tm_yday;   /* 1월1일부터 일수 0~365 */
    int tm_isdst;  /* summer타임 flag */
    long tm_gmtoff;  /*  */
    const char *tm_zone;  /* 초*/
} *

컴파일 & 실행

다음과 같이 “-o 실행파일” 옵션을 지정해 gcc커맨드로timetest01.c를 컴파일합니다.

$ gcc -o timetest01 timetest01.c

컴파일이 성공적으로 끝나면 실행파일 timetest01가 작성됩니다.

$ ls -la
... 중간 생략 ...
-rwxrwxr-x. 1 centos centos 8504 May 15 14:31 timetest01
-rw-rw-r--. 1 centos centos  427 May 15 14:30 timetest01.c

의도한 내용대로 출력되는지 확인을 위해 timetest01를 다음과 같이 실행합니다.

$ ./timetest01
2021/05/15 14:55:58


タイトルとURLをコピーしました