asctime_r(3)

#include <time.h>

char *asctime_r(const struct tm *tm, char *buf);

struct tm 구조체를 날짜 및 시간 표시 문자열로 변환합니다. 문자열의 format은 "Wed Jan 25 15:52:09 2017\n"형태로 끝에 new line이 붙습니다. 변환된 문자열은 buf에 저장되므로 buf의 크기는 null-terminate값까지 최소 26바이트 이상이 되어야 합니다. 이 함수는 asctime(3)과는 달리 multi-thread에서는 안전한 thread safe 함수입니다.

 

 

파라미터

tm
    - struct tm 의 변수로 localtime(3), gmtime(3) 등을 통하여 구조체를 얻을 수 있습니다.

struct tm의 구조는 아래와 같습니다.

struct tm {
   int tm_sec;         /* seconds */
   int tm_min;         /* minutes */
   int tm_hour;        /* hours */
   int tm_mday;        /* day of the month */
   int tm_mon;         /* month */
   int tm_year;        /* year */
   int tm_wday;        /* day of the week */
   int tm_yday;        /* day in the year */
   int tm_isdst;       /* daylight saving time */
};
buf
    - struct tm을 문자열 format("Wed Jan 25 15:52:09 2017\n")으로 변환된 데이터를 저장할 buffer입니다.

buf의 크기는 최소 26바이트 이상되어야 합니다.

 

RETURN

NULL 아님
    - buf를 return 합니다.
  
NULL
    - 오류가 발생하였습니다.

 


활용 예제

 

Sample

#include <time.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    time_t t;
    struct tm *lt;
    char   time_str[26];

    if((t = time(NULL)) == -1) {
        perror("time() call error");
        return -1;
    }

    if((lt = localtime(&t)) == NULL) {
        perror("localtime() call error");
        return -1;
    }



    printf("현재시각: %04d-%02d-%02d %02d:%02d:%02d\n",
        lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
        lt->tm_hour, lt->tm_min, lt->tm_sec);

    /* new line이 자동으로 붙기 때문에 %s 뒤에 \n가 필요없음 */
    if(asctime_r(lt, time_str) != NULL) {
        printf("asctime_r() : %s", time_str);
    }

    return 0;
}

결과:
현재시각: 2017-01-25 17:18:22
asctime_r() : Wed Jan 25 17:18:22 2017

 


 

see also : 시간 관련 함수

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag , , ,

댓글을 달아 주세요