이 글에서는 Linux C언어 시간 다루는 함수에 대한 내용을 소개합니다.
입력 Type | 변환 함수 | 출력 Type |
---|---|---|
NULL | time_t time (time_t *__timer) 세계표준시(UTC)1970년1월1일0시0분0초 이후의 지금 현재까지의 초 수를 취득합니다. | time_t |
time_t | char *ctime (const time_t *__timer) | char* |
time_t | struct tm *gmtime (const time_t *__timer) struct tm *localtime (const time_t *__timer) | struct tm |
struct tm | time_t mktime (struct tm *__tp) | time_t |
환경 정보
위 내용의 조사 환경은 다음과 같습니다.
$ 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");
}
소스 설명
- 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
- timezone변경은 [타임 존 KST(Korea Standard Time)로 변경하기] 를 참조 하십시오.
- 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