asctime(3) 

#include <time.h>

char *asctime(const struct tm *tm);

struct tm 구조체를 날짜 및 시간 표시 문자열로 변환합니다. 문자열의 format은 "Wed Jan 25 15:52:09 2017\n"형태로 끝에 new line이 붙습니다. 변환된 문자열은 local static변수로 저장되므로 asctime(3)을 다시 실행하면 내용이 변경됩니다. multi-thread에서는 문제가 발생할 수 있으므로 asctime_r(3)을 사용해야 합니다.

 

파라미터

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 */
};

 

RETURN

NULL 아님
    - "Wed Jan 25 15:52:09 2017\n" 형태의 문자열로 static local 변수를 사용하므로
      다음 asctime(3)호출되면 다른 값으로 변경됩니다.
    - 특히, multi-thread에서는 문제가 발생할 수 있으므로 asctime_r(3)을 사용할 것을 권고합니다.
    
NULL
    - 오류가 발생하였습니다.

 


활용 예제

 

Sample

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

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

    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가 필요없음 */
    printf("asctime() : %s", asctime(lt));

    return 0;
}

결과:
현재시각: 2017-01-25 17:05:23
asctime() : Wed Jan 25 17:05:23 2017

 


 

see also : 시간 관련 함수

 

 

 

블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

Tag , , ,

댓글을 달아 주세요

  • C 2022.03.30 21:34  댓글주소  수정/삭제  댓글쓰기

    시간 날짜 표시 C 언어 소스

    2022년03월20일 (일) 오전02시41분47.643초 이런 형식

    ///////////////////////

    #include <windows.h> // use to define SYSTEMTIME , GetLocalTime() and GetSystemTime()
    #include <stdio.h> // For printf() (could otherwise use WinAPI equivalent)

    int main(void) { // Or any other WinAPI entry point (e.g. WinMain/wmain)
    SYSTEMTIME t; // Declare SYSTEMTIME struct

    GetLocalTime(&t); // Fill out the struct so that it can be used
    char* week[7] = {"일","월","화","수","목","금","토"};
    char* aft[2] = {"오전","오후"};
    int ampm;
    // Use GetSystemTime(&t) to get UTC time
    if (t.wHour < 12) {
    ampm=0;
    }
    else { // after midday
    ampm=1;
    }

    printf("%d년%02d월%02d일 (%s) %s%02d시%02d분%02d.%02d초", t.wYear, t.wMonth, t.wDay, week[t.wDayOfWeek], aft[ampm], t.wHour, t.wMinute, t.wSecond, t.wMilliseconds);

    return 0;
    }

    ///////////////////////

    명령 CMD 창을 열고

    GCC 컴파일러가 있는 폴더를 PATH 로 지정

    PATH=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin

    C:\Users\compu\Desktop\압축 푼 폴더> gcc -o y.exe ymdtime.c

    C:\Users\compu\Desktop\압축 푼 폴더> y
    2022년03월20일 (일) 오전02시41분47.643초

    chcp 65001 명령을 써서 code 를 변경하셔서 사용하시려면
    소스 코드를 UTF-8 로 바꾼 후 저장하고 다시 컴파일해야 합니다.

    chcp 65001
    Active code page: 65001

    C:\Users\compu\Desktop\TIME>time.exe
    2022년03월21일 (월) 오전02시03분42.450초

    시간 표시 결과를 변수에 넣는 법
    ※ "tokens=*" %a / ymdtime=%a
    이렇게 %a 1 글자만 써야 합니다. %aa %myvar 이렇게 1자 넘으면 안 됩니다.

    파일명.CMD 명령어 배치 파일에서는 이렇게 %%a 라고 써야 합니다.
    for /f "tokens=*" %%a in ('%%SETIDFY%% -format "%%wx%%h" %SETRSLT_CNT_IMG%') do set GETWH=%%a

    PATH=%PATH%;D:\2TIMES

    for /f "tokens=*" %a in ('ymdtime.exe') do set ymdtime=%a

    SET TM=한국시각 %ymdtime%