반응형
리눅스/윈도우 C : 현재날짜와 시간 가져오기
알게된 배경
서버애서 생성하는 파일명에 날짜와 시간요소를 넣어서 생성하기 위해서 시스템의 시간을 알아야 할 필요가 있었다.
리눅스 계열(유닉스)과 윈도우
윈도우 엄밀하게 말하면, MVC(VS 20xx)에서 사용하는 컴파일러는 C++에 대해서는 지원을 잘하지만, C에대해서는 지원이 잘 안되고 있다. 따라서 본의 아니게 소스코드를 실행할 때 차이점이 발생한다. 물론 이를 해결하기 위해서는 새로 소스코드를 작성하거나 minGW, Cygwin 처럼 리눅스 함수를 윈도우에 맞게 포팅해주는 컴파일러를 사용하면된다(하지만 socket 계열은 지원이 안되는 걸로 기억한다).
시간에 대해서 더 자세히 알기 위해서는 struct tm에 대해서 검색을 해보도록 하자.
리눅스 소스코드
C++에서는 헤더파일을 ctime으로 호출이 가능하며, 동일하게 사용이 가능하다.
// clock.c
#include <stdio.h>
#include <time.h>
void printTime(void)
{
time_t timer;
struct tm* t;
timer = time(NULL);
t = localtime(&timer);
printf("UNIX Time : %d [sec]\n\n", timer);
printf("year : %d\n", t->tm_year + 1900);
printf("month : %d\n", t->tm_mon + 1);
printf("days : %d\n", t->tm_mday);
printf("hour : %d\n", t->tm_hour);
printf("min : %d\n", t->tm_min);
printf("sec : %d\n", t->tm_sec);
}
윈도우 소스코드
리눅스 소스코드와 차이점은 struct tm 포인터 객체 대신 객체 자체를 선언하면 되며, localtime_s()를 사용한다.
// clock.c
#include <stdio.h>
#include <time.h>
void printTime(void)
{
time_t timer;
struct tm t;
timer = time(NULL);
localtime_s($t, &timer);
printf("WINDOWS Time : %d [sec]\n\n", timer);
printf("year : %d\n", t->tm_year + 1900);
printf("month : %d\n", t->tm_mon + 1);
printf("days : %d\n", t->tm_mday);
printf("hour : %d\n", t->tm_hour);
printf("min : %d\n", t->tm_min);
printf("sec : %d\n", t->tm_sec);
}
참고자료
반응형
'C' 카테고리의 다른 글
리눅스 C : TCP 소켓 프로그램 (0) | 2017.05.24 |
---|---|
Linux C : 파일이나 폴더 조회하기 (0) | 2017.04.24 |
C : 구조체를 네임스페이스처럼 사용하기 (0) | 2017.04.22 |
C : 문자열 숫자 변환 (0) | 2017.04.21 |
C : extern 키워드 (0) | 2016.11.28 |