__DATE__ , __TIME__은 자주 쓰는 macro 중의 하나다. 프로그램의 로그 또는 빌드 날짜를 넣을 때 쓰기도 하고 아주 유용하다. 이 유용한 macro를 time_t로 변환해 볼까 하는 생각을 다들 해봤을 것 같다. 이번에 __DATE__, __TIME__을 쓰면서 값을 유지해야 할 일이 있었다. 같은 값을 여러 군데 넣어야 하는데 그냥 macro를 사용하면 차이가 나서 문제가 되는 상황이었다. 그렇다면 방법은 이 값을 저장해야 하는데 그냥 저장하는 것보다 time_t와 같은 형태로 저장하면 유용할 것 같다.
이럴 때 우리가 해야 할 일은 코딩이 아니라 검색 검색 검색.
당연히 많은 예제가 있고 입맛에 맞는 것을 고르면 된다.
compile_time_to_system_time - Function to convert compiler macro __DATE__ and _… | Mbed
일단 출력 형태를 확인한다.
$ ./test
__DATE__ : Sep 20 2023
__TIME__ : 14:54:07
월을 strstr() 함수로 변화하는 방식은 재미있다. 저런 방법이 있었구나. 역시 다른 사람의 코드를 자주 봐야 한다. 여기서 "%*c"가 쓰이는데 시간 사이의 세미콜론(:) 입력을 무시하게 되어 숫자만 sscanf로 받는다.
time_t cvt_date(char const *date, char const *time)
{
char s_month[5];
int year;
struct tm t;
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
sscanf(date, "%s %d %d", s_month, &t.tm_mday, &year);
sscanf(time, "%2d %*c %2d %*c %2d", &t.tm_hour, &t.tm_min, &t.tm_sec);
// Find where is s_month in month_names. Deduce month value.
t.tm_mon = (strstr(month_names, s_month) - month_names) / 3;
t.tm_year = year - 1900;
return mktime(&t);
}
모를 땐 검색!
알아도 검색!
남는 시간은 독서에 투자!
'놀기 > 잡스러운 것' 카테고리의 다른 글
[NVR 만들기] H.265 지원 (1) | 2023.09.02 |
---|---|
[bmNVR] 수신한 데이터를 받을 Source 만들기 (ByteStreamMemoryBufferSource 참조) (0) | 2023.09.01 |
[bmNVR] QT 기반으로 옮기기 (0) | 2023.08.30 |
[bmNVR] h264 데이터를 ts(transport stream)로 만들기 (0) | 2023.08.30 |
[bmNVR] LIVE555 (ubuntu 20.04) 빌드 (0) | 2023.08.30 |
댓글