Namespaces
Variants

asctime, asctime_s

From cppreference.net
헤더 파일에 정의됨 <time.h>
(1)
char * asctime ( const struct tm * time_ptr ) ;
(C23까지)
[ [ deprecated ] ] char * asctime ( const struct tm * time_ptr ) ;
(C23부터)
errno_t asctime_s ( char * buf, rsize_t bufsz, const struct tm * time_ptr ) ;
(2) (C11부터)
1) 주어진 달력 시간을 다음과 같은 고정된 25자 형식의 텍스트 표현으로 변환합니다: Www Mmm dd hh : mm : ss yyyy\n
  • Www - time_ptr - > tm_wday 에서 가져온 세 글자 영어 요일 약어 ( Mon , Tue , Wed , Thu , Fri , Sat , Sun 중 하나)
  • Mmm - time_ptr - > tm_mon 에서 가져온 세 글자 영어 월 이름 약어 ( Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec 중 하나)
  • dd - timeptr - > tm_mday 에서 가져온 2자리 월 중 날짜, sprintf 를 사용하여 % 2d 로 출력한 것처럼
  • hh - timeptr - > tm_hour 에서 가져온 2자리 시간, sprintf 를 사용하여 % .2d 로 출력한 것처럼
  • mm - timeptr - > tm_min 에서 가져온 2자리 분, sprintf 를 사용하여 % .2d 로 출력한 것처럼
  • ss - timeptr - > tm_sec 에서 가져온 2자리 초, sprintf 를 사용하여 % .2d 로 출력한 것처럼
  • yyyy - timeptr - > tm_year + 1900 에서 가져온 4자리 연도, sprintf 를 사용하여 % 4d 로 출력한 것처럼
* time_ptr 의 어떤 멤버가 정상 범위를 벗어날 경우 동작은 정의되지 않습니다.
time_ptr - > tm_year 가 나타내는 달력 연도가 4자리를 초과하거나 1000년보다 작은 경우, 동작은 정의되지 않습니다.
이 함수는 지역화를 지원하지 않으며, 줄바꿈 문자를 제거할 수 없습니다.
이 함수는 정적 저장소를 수정하며 스레드 안전하지 않습니다.
이 함수는 더 이상 사용되지 않으며 새로운 코드에서 사용해서는 안 됩니다.
(since C23)
2) (1) 과 동일하지만, 메시지가 사용자가 제공한 저장 공간 buf 에 기록되며, 이는 null 종료됨이 보장됩니다. 또한 런타임에 다음 오류들이 감지되어 현재 설치된 constraint handler 함수를 호출합니다:
  • buf 또는 time_ptr 가 null 포인터인 경우
  • bufsz 가 26보다 작거나 RSIZE_MAX 보다 큰 경우
  • * time_ptr 의 모든 멤버가 정상 범위 내에 있지 않은 경우
  • time_ptr - > tm_year 로 표시된 연도가 0보다 작거나 9999보다 큰 경우
모든 경계 검사 함수와 마찬가지로, asctime_s 는 구현에서 __STDC_LIB_EXT1__ 가 정의되고 사용자가 <time.h> 를 포함하기 전에 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 로 정의한 경우에만 사용 가능함이 보장됩니다.

목차

매개변수

time_ptr - 출력할 시간을 지정하는 tm 객체에 대한 포인터
buf - 최소 26바이트 길이의 사용자 제공 버퍼에 대한 포인터
bufsz - 사용자 제공 버퍼의 크기

반환값

1) 위에서 설명한 바와 같이 날짜와 시간의 텍스트 표현을 담고 있는 정적 null 종료 문자 문자열에 대한 포인터. 이 문자열은 asctime ctime 사이에서 공유될 수 있으며, 이러한 함수들 중 어느 하나가 호출될 때마다 덮어씌워질 수 있습니다.
2) 성공 시 0을 반환하고, 실패 시 0이 아닌 값을 반환하며, 이 경우 buf [ 0 ] 가 0으로 설정됩니다 ( buf 가 null 포인터이거나 bufsz 가 0이거나 RSIZE_MAX 보다 큰 경우는 제외).

참고 사항

asctime 는 정적 데이터에 대한 포인터를 반환하며 스레드 안전하지 않습니다. POSIX는 이 함수를 더 이상 사용하지 않도록 표시하고 대신 strftime 을 권장합니다. C 표준 또한 strftime 이 더 유연하고 로캘을 인식하기 때문에 asctime asctime_s 대신 strftime 을 권장합니다.

POSIX는 출력 문자열이 25자를 초과할 때, timeptr - > tm_wday 또는 timeptr - > tm_mon 이 예상 범위를 벗어날 때, 또는 timeptr - > tm_year INT_MAX - 1990 을 초과할 때만 미정의 동작을 제한합니다.

일부 구현에서는 timeptr - > tm_mday == 0 을 이전 달의 마지막 날을 의미하는 것으로 처리합니다.

예제

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <time.h>
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm)); // note implicit trailing '\n'
#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &tm);
    printf("%s", str);
#endif
}

가능한 출력:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 7.27.2.1 asctime 함수 (p: 287)
  • K.3.8.2.1 asctime_s 함수 (p: 453-454)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.27.2.1 asctime 함수 (p: 392-393)
  • K.3.8.2.1 asctime_s 함수 (p: 624-625)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.23.3.1 asctime 함수 (p: 341-342)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.12.3.1 asctime 함수

참고 항목

(C23에서 사용 중단됨) (C11)
time_t 객체를 텍스트 표현으로 변환
(함수)
tm 객체를 사용자 지정 텍스트 표현으로 변환
(함수)
C++ 문서 for asctime