101 – 기타 시간 관련 함수

시간과 관련된 기타 함수에서 많이 쓰는 게 difftime과 clock이 있다. difftime  함수는 두 개의 time_t형 함수로부터 시간 차를 구하는 함수고, clock함수는 프로그램 실행 후 현재깨지 경과한 시간을 반환한다.

  • 함수 이름 | 기능
  • difftime | 초 단위의 시간차를 구한다.
  • clock | 프로그램 실행 후 현재까지의 시간을 구한다.

이 함수들을 직접 확인하려면 시간차가 있는 프로그램을 만들어야 하는데, 예시처럼 만들어 보았다. sleep이라는 함수를 사용하였는데, 이 함수는 일정 시간동안 프로그램이 정지를 하는 함수이다.

스크린샷_2017-05-15_19-42-31

이렇게 스크린샷으로만 봐선 잘 모를 거 같아서 실행 화면을 녹화해서 유튜브에 올렸다. sleep으로 지정한 딱 5초 있다가 프로그램이 다시 실행되어서 시간차 5를 반환했다.

 

100 – 형식 변환 함수

시간 정보를 여러 형식으로 변환할 수 있는데, localtime과 gmtime은 time_t 형 시간 정보를 struct tm형으로 변환한다. 이 형을 한번 살펴보자.

struct 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;        //연도(1990~)
int tm_wday;      //요일 (0~6)
int tm_yday;       //1월 1일 이후의 날짜
int tm_isdst;       //썸머타임(양수일 때 유효, 0일때 무효, 음수일 때 사용 불가)
}

  • 함수 이름 | 기능
  • localtime | time_t형 시간 정보를 struct tm형 지역 시간으로 변환한다.
  • gmtime  | time_t형  시간 정보를 struct tm형 세계 표준 시간으로 변환한다.

기능에 보면 시간 표기의 차이가 있다는 것을 볼 수 있다. 리눅스 설치 시에 지정한 로컬 타임존에 따라서 지역 시간으로 변환하느냐 아니면 글로벌 시간으로 변환하느냐의 차이다. 사용법은 아래의 예시를 확인하자.

이와 반대로 struct tm 형 시간을 time_t형으로 변환하는 함수 또한 존재한다.

  • 함수 이름 | 기능
  • mktime | struct tm형 시간 정보를 time_t형으로 변환한다.

또한 struct tm형의 시간 정보를 사용자가 알아보기 쉽게 문자열로 변환해주는 함수 또한 존재한다. 기본적으로 제공되는 서식 형태로도 만들 수 있지만, 개발자가 직접 서식을 지정할 수 잇는 함수 또한 존재한다.

  • 함수 이름 | 기능
  • asctime | struct tm 형 시간 정보를 문자열로 변환한다.
  • strftime | struct tm형 시간 정보를 서식을 갖춘 시간 정보로 변환한다.

변환에 필요한 변환 형식은 변환 문자열을 확인하여 직접 작성하면 된다. 두 번째에 변환 포맷을 지정할 수 있고, 변환 문자열은 다음과 같다.

  • 변환 문자열 |  의미
  • %a | 요일 이름의 약자
  • %A | 요일 이름
  • %b | 월 이름의 약자
  • %B | 월 이름
  • %c | 지역 날짜와 시간
  • %d | 날짜
  • %H | 시간 (24시간)
  • %I | 시간 (12시간)
  • %j | 1월 1일 이후의 날짜
  • %m | 월
  • %M | 분
  • %p  | AM, PM
  • %S | 초
  • %w | 요일
  • %x | 지역 날짜
  • %X | 지역 시간
  • %y | 연도
  • %Y | 연도(4자리수)
  • %% | 퍼센트 기호

어기까지의 내용만 가지고 예제를 확인해보자. 함수 여럿 좀 써보겠다고 해서 자잘하게 해봤다.

99 – 시간 표시 함수

시스템의 시간을 얻는 함수인 time을 사용하면 “1970년 1월 1일 00:00:00 UTC” 이후의 시간을 초 단위로 반환하고 이 때 t가 시간 정보를 가리킨다. 이 시작시간이 되게 중요하다. 흔히들 POSIX Time 또는 Unix Time이라고 한다.

  • 함수 이름 | 기능
  • time | 초 단위의 현재 시간 정보를 얻는다.
  • ctime | time_t형 시간 정보를 문자열로 반환한다.

반환되거나 time이 가리키는 시간 정보는 별도로 정의되어 있다.

typedef long time_t;

예제를 보면 사용법을 금방 알 수 있다.

실행 결과에서 볼 수 있듯이 long형 정수로 표현된다. 정의된 대로 받아온 것이긴 한데,  이걸 일일이 따져서 계산하기 전에는 어떤 시간인지를 알 수 없다. 그래서 이걸 사용자가 알아볼 수 있게 변환하는 함수가 ctime  함수이다. ctime 예제도 같이 살펴보자.

98 – 날짜와 시간 함수

리눅스 시스템 앞에 앉아 있다면 시계가 없어도 date 명령어를 이용하여 현재의 시간을 정확히 알 수 있다. 라이브러리에서는 이렇게 날짜와 시간 관련 함수를 제공하고 있으므로 이를 이용하면 date 명령어와 같이 시스템의 현재 시간을 알아내는 프로그램을 간단하게 구현할 수 있다.

또한 이러한 날짜와 시간 함수를 이용하면 현재 시간을 알 수 있을 뿐만 아니라 사용자들이 보기 좋게 변환하거나 시간차를 구할 수도 있다.

날짜와 시간은 프로그램에서 여러모로 관리되는 기능이기 때문에 날짜와 시간 함수가 사용되는 경우는 많이 존재한다.