맨위로가기

C 날짜와 시간 함수

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

C 날짜와 시간 함수는 C 표준 라이브러리의 time.h 헤더 파일에 정의되어 있으며, 시간과 날짜를 얻고 조작하는 데 사용되는 함수들을 포함한다. 이 함수들은 1977년 PWB/UNIX 1.0의 date 시스템 명령에서 유래되었으며, 1989년 ANSI C 표준에 포함되었다. 주요 함수로는 프로그램 시작 후 경과된 CPU 시간을 반환하는 clock, 두 시간 값의 차이를 계산하는 difftime, 현재 시스템 시간을 반환하는 time 등이 있다. 또한, 시간 값을 문자열로 변환하거나, 캘린더 시간으로 변환하는 asctime, ctime, strftime, gmtime, localtime, mktime 등의 함수도 제공된다. 이 외에도 널 포인터, 초당 클럭 틱 수 등을 나타내는 상수와, 시간 저장을 위한 size_t, clock_t, time_t, timespec 등의 형식 정의, 그리고 날짜와 시간을 나타내는 tm 구조체를 포함한다.

광고

더 읽어볼만한 페이지

  • C 표준 라이브러리 - 파일 끝
    파일 끝(EOF)은 데이터 소스에서 더 이상 읽을 데이터가 없음을 나타내는 조건이다.
  • C 표준 라이브러리 - C 자료형
    C 자료형은 C 언어에서 데이터 형태를 정의하는 기본 요소로, 다양한 크기와 속성을 가진 산술, 부울 자료형과 구조체, 공용체 등을 제공하며, 컴파일러 및 시스템 아키텍처에 따라 크기와 동작 방식이 달라질 수 있다.
  • 시간 - 오전
  • 시간 - 과거
    과거는 이전에 일어난 일, 개인의 경험, 특정 시점 등을 의미하며, 찰스 디킨스의 소설에 등장하고, 철학, 학문 등 다양한 분야에서 연구되며, 교훈을 담고 있는 주제이다.

2. 역사

`strftime`에서 사용되는 형식 문자열은 1977년에 출시된 PWB/UNIX 1.0의 `date` 시스템 명령에서 기원한다.[2][3] 1989년에는 `strftime` 및 기타 날짜 및 시간 함수를 포함하는 ANSI C 표준이 발표되었다.[4]

3. 함수

`time.h`는 C 언어의 표준 라이브러리로, 시간과 날짜를 얻거나 조작하는 함수들을 포함하고 있다. 크게 시간 조작 함수와 형식 변환 함수로 나눌 수 있다.

함수설명
clock프로그램 시작 후 경과된 시간을 반환한다.
difftime두 시간 값의 차이를 초 단위로 계산한다.
time현재 시스템 시간을 반환한다.
asctimetm 구조체를 텍스트 표현으로 변환한다.
ctime`time_t` 값을 텍스트 표현으로 변환한다.
mktimetm 구조체를 `time_t` 형식으로 변환한다.
gmtime`time_t` 값을 협정 세계시(UTC)로 표현된 캘린더 시간으로 변환한다.
localtime`time_t` 값을 현지 시간으로 표현된 캘린더 시간으로 변환한다.
strftimetm 구조체를 사용자 지정 텍스트 표현으로 변환한다.



C 표준 라이브러리에서는 `clock_t`, `time_t` 등의 시간 관련 데이터 타입도 제공하며, `CLOCKS_PER_SEC`와 `TIME_UTC` 같은 상수도 정의되어 있다.[5]

3. 1. 시간 조작


  • '''clock''': 프로그램 시작 후 경과된 CPU 시간을 반환한다.[5]
  • '''difftime''': 두 `time_t` 값 간의 차이를 초 단위로 계산한다.[5]
  • '''time''': 현재 시스템 시간을 `time_t` 값으로 반환한다. (일반적으로 유닉스 에포크 이후 경과된 초)[5]
  • '''timespec_get''' (C11): 지정된 기준 시간에 기반한 캘린더 시간을 반환한다.[5]

3. 2. 형식 변환


  • '''asctime''' (const struct tm * timeptr): timeptr이 가리키는 tm 구조체를 텍스트 표현으로 변환한다. (더 이상 사용되지 않음)[5]
  • '''ctime''' (const time_t * timer): time_t 값을 텍스트 표현으로 변환한다.[5]
  • '''strftime''' (char * ptr, size_t maxsize, const char * format, const struct tm * timeptr): tm 구조체를 사용자 지정 텍스트 표현으로 변환한다.[5]
  • '''strptime''' (const char *s, const char *format, struct tm *tm): 시간 정보를 포함하는 문자열을 tm 구조체로 변환한다.
  • '''wcsftime''' (wchar_t *wcs, size_t maxsize, const wchar_t *format, const struct tm *timeptr): tm 구조체를 사용자 지정 와이드 문자열 텍스트 표현으로 변환한다.[5]
  • '''gmtime''' (const time_t * timer): time_t 값을 협정 세계시(UTC)로 표현된 캘린더 시간으로 변환한다.[5]
  • '''localtime''' (const time_t * timer): time_t 값을 현지 시간으로 표현된 캘린더 시간으로 변환한다.[5]
  • '''mktime''' (struct tm * timeptr): 캘린더 시간을 time_t 값으로 변환한다.[5]

4. 변수, 상수 및 형식

C 날짜 및 시간 연산은 `time.h` 헤더 파일(C++의 `ctime` 헤더)에 정의되어 있다.

이름설명
NULL널 포인터를 나타내는 상수로, 메모리의 어떤 유효한 위치의 개체도 가리키지 않는 포인터 값이다.
CLOCKS_PER_SEC초당 ms 수(=1000)이다.
size_tsizeof 연산자의 결과값을 나타내는 정수형이다.
clock_t프로세스 실행 시간을 나타내는 형식이다.
time_tUTC 1970년 1월 1일 0시 0분 0초(유닉스 에포크)를 기준으로 하는 초 단위의 시간을 저장하는 형식이다.
timespec초 및 나노초 단위의 시간을 나타내는 형식이다. (C11)


4. 1. 상수


  • '''NULL''': 널 포인터를 나타내는 상수로, 메모리의 어떤 유효한 위치의 개체도 가리키지 않는 포인터 값이다.
  • '''CLOCKS_PER_SEC''': 초당 프로세서 클럭 틱 수를 나타낸다.
  • '''TIME_UTC''': 협정 세계시(UTC)에 대한 시간 기준이다. (C11)[6][9]

4. 2. 형식 정의

이름설명
size_tsizeof 연산자의 결과값을 나타내는 정수형이다.
clock_t프로세스 실행 시간을 나타내는 형식이다.
time_tUTC 1970년 1월 1일 0시 0분 0초(유닉스 에포크)를 기준으로 하는 초 단위의 시간을 저장하는 형식이다.
timespec초 및 나노초 단위의 시간을 나타내는 형식이다. (C11)


5. 구조체

'''tm''' 구조체는 날짜와 시간을 나타내는 구조체이다. time.h 헤더 파일(C++에서는 ctime 헤더)에 정의되어 있다.

'''tm''' 구조체의 멤버는 다음과 같다.


  • '''tm_sec''': 초 (0~59)
  • '''tm_min''': 분 (0~59)
  • '''tm_hour''': 시 (0~23)
  • '''tm_mday''': 일 (1~31)
  • '''tm_mon''': 월 (0~11)
  • '''tm_year''': 년 (1900년 기준)
  • '''tm_wday''': 요일 (일요일부터 시작, 0~6)
  • '''tm_yday''': 연중 일자 (0~365)
  • '''tm_isdst''': 서머타임 설정 여부

6. 예제

다음은 현재 시간을 표준 출력 스트림에 출력하는 C 소스 코드이다.

```c

#include

#include

#include

int main(void)

{

time_t current_time;

char* c_time_string;

/* 현재 시간 얻기 */

current_time = time(NULL);

if (current_time == ((time_t)-1))

{

(void) fprintf(stderr, "현재 시간을 얻는 데 실패했습니다.\n");

exit(EXIT_FAILURE);

}

/* 현지 시간 형식으로 변환 */

c_time_string = ctime(¤t_time);

if (c_time_string == NULL)

{

(void) fprintf(stderr, "현재 시간을 변환하는 데 실패했습니다.\n");

exit(EXIT_FAILURE);

}

/* stdout에 출력합니다. ctime()은 이미 줄 바꿈 문자를 추가했습니다. */

(void) printf("현재 시간은 %s", c_time_string);

exit(EXIT_SUCCESS);

}

```

출력은 다음과 같다.

```

Current time is Thu Sep 15 21:18:23 2016

참조

[1] 서적 ISO/IEC 9899:1999 specification http://www.open-std.[...]
[2] 웹사이트 PWB1 date system command - man page https://www.tuhs.org[...]
[3] 웹사이트 date.c sourcecode of PWB1 https://www.tuhs.org[...]
[4] 웹사이트 Rationale for American National Standard for Information Systems - Programming Language - C - Date and Time https://www.lysator.[...]
[5] 문서 open-std.org - Committee Draft -- May 6, 2005 http://www.open-std.[...]
[6] 웹사이트 Modernized API for ISO C https://www.cl.cam.a[...]
[7] 서적 ISO/IEC 9899:1999 specification http://www.open-std.[...]
[8] 문서 open-std.org - Committee Draft -- May 6, 2005 http://www.open-std.[...]
[9] 웹사이트 Modernized API for ISO C https://www.cl.cam.a[...] 2023-11-30
[10] 서적 ISO/IEC 9899:1999 specification http://www.open-std.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com