C++ 날짜와 시간: 초보자 가이드

안녕하세요, 미래의 C++ 마법사 여러분! 오늘은 C++에서 날짜와 시간의 세계를 탐험하는 흥미로운 여정을 떠날 거예요. 아직 코드를 한 줄도 작성하지 않았다고 해도 걱정 마세요 – 저는 여러분과 함께 있어서, 모든 것을 단계별로 설명해 드릴 거예요. 그럼, 좋아하는 음료를 준비하고 편하게 앉아서, 같이 빠지자!

C++ Date & Time

기본 이해

날짜와 시간을 조작하기 전에, C++에 내장된 날짜 형식이 없다는 것을 이해하는 것이 중요해요. 대신, C++는 시간을 나타내기 위해 time_t 데이터형식을 사용해요. 이것이 좀 이상하게 들릴 수 있지만, 1970년 1월 1일부터 경과된 초를 나타내는 큰 숫자라고 생각하면 됩니다. 이 날짜는 컴퓨터 과학에서 종종 "에포크"라고 불립니다 – 현대 컴퓨팅의 탄생일과 같아요!

현재 날짜와 시간

간단하지만 강력한 것부터 – 현재 날짜와 시간을 가져오는 방법을 알아보겠습니다. 이렇게 하면 됩니다:

#include <iostream>
#include <ctime>

int main() {
time_t now = time(0);
std::cout << "Current time: " << now << std::endl;
return 0;
}

이렇게 동작합니다:

  1. 우리는 입력/출력 연산과 시간 관련 함수를 위해 <iostream><ctime> 헤더를 포함합니다.
  2. main() 함수에서 time(0)을 사용하여 현재 시간을 가져옵니다.
  3. 이 시간을 time_t 변수인 now에 저장합니다.
  4. 마지막으로, 이 값을 출력합니다.

이 프로그램을 실행하면 큰 숫자가 출력됩니다. 그것은 에포크 이후 경과된 초입니다. 인간이 읽기 쉽게 않죠? 걱정 마세요, 곧 수정하겠습니다!

time_t를 문자열로 변환

이제 우리의 출력을 더 읽기 쉽게 만들어보겠습니다:

#include <iostream>
#include <ctime>

int main() {
time_t now = time(0);
char* dt = ctime(&now);
std::cout << "The local date and time is: " << dt << std::endl;
return 0;
}

새로운 점은 다음과 같습니다:

  1. 우리는 ctime() 함수를 사용하여 time_t 값을 문자열로 변환합니다.
  2. 이 문자열은 dt에 저장됩니다.
  3. 우리는 이 문자열을 출력하여 인간이 읽을 수 있는 날짜와 시간을 얻습니다.

많이 나아졌죠? "The local date and time is: Tue Jun 22 15:30:45 2023"과 같은 것을 볼 수 있습니다.

struct tm을 사용하여 시간 형식 지정

ctime()는 편리하지만, 때로는 날짜와 시간 형식에 더 많은 제어가 필요합니다. 이 때 struct tm이 유용합니다. 이 구조체는 시간을 연(년), 월, 일, 시, 분 등의 구성 요소로 나눕니다.

이렇게 사용하면 됩니다:

#include <iostream>
#include <ctime>

int main() {
time_t now = time(0);
tm *ltm = localtime(&now);

std::cout << "Year: " << 1900 + ltm->tm_year << std::endl;
std::cout << "Month: " << 1 + ltm->tm_mon << std::endl;
std::cout << "Day: " << ltm->tm_mday << std::endl;
std::cout << "Time: " << ltm->tm_hour << ":";
std::cout << ltm->tm_min << ":";
std::cout << ltm->tm_sec << std::endl;

return 0;
}

이렇게 동작합니다:

  1. 우리는 localtime()를 사용하여 time_t 값을 tm 구조체로 변환합니다.
  2. 그런 다음, 날짜와 시간의 개별 구성 요소에 접근하기 위해 구조체 멤버를 사용합니다.
  3. tm_year는 1900년부터 연을 세므로 1900을 더해야 합니다.
  4. tm_mon은 0에서 11까지 월을 나타므로 1을 더해야 합니다.

이렇게 하면 날짜와 시간 정보를 표시하는 데 더 많은 유연성을 가질 수 있습니다.

형식 옵션

이제 날짜와 시간의 개별 구성 요소에 접근하는 방법을 알았으니, 일반적인 형식 옵션을 살펴보겠습니다:

형식 지정자 설명 예시
%Y 연 (4자리) 2023
%y 연 (2자리) 23
%m 월 (01-12) 06
%d 월의 일 (01-31) 22
%H 24시간 형식의 시간 (00-23) 15
%I 12시간 형식의 시간 (01-12) 03
%M 분 (00-59) 30
%S 초 (00-59) 45
%p AM 또는 PM 지정 PM

이제 이들을 사용해 보겠습니다:

#include <iostream>
#include <ctime>
#include <iomanip>

int main() {
time_t now = time(0);
tm *ltm = localtime(&now);

std::cout << "Custom format: "
<< std::put_time(ltm, "%Y-%m-%d %I:%M:%S %p")
<< std::endl;

return 0;
}

이 예제에서:

  1. 우리는 std::put_time를 위해 <iomanip> 헤더를 포함합니다.
  2. 우리는 std::put_time를 사용하여 제공한 지정자에 따라 시간을 형식 지정합니다.
  3. 이는 "2023-06-22 03:30:45 PM"과 같은 출력을 생성합니다.

결론

축하합니다! 여러분은 C++에서 날짜와 시간 조작의 첫 걸음을 내딛었습니다. 현재 시간을 가져오고, 그것을 읽을 수 있는 문자열로 변환하고, 개별 구성 요소에 접근하고, 심지어는 사용자 정의 형식을 만드는 방법을 다루었습니다.

기억해요, 날짜와 시간을 다루는 것은 힘들 수 있습니다 (시간대, 섬봉일 시간, 윤년 등을 생각해 봐요),但这些基础知识는 대부분의 상황에서 유용합니다. C++ 여정을 계속하면서, 더 복잡한 날짜와 시간 연산을 처리하기 위한 고급 기술과 라이브러리를 발견할 것입니다.

연습을 계속하고, 호기심을 지키고, 가장 중요한 것은 코딩을 즐기세요! 누가 알아, 언젠가는 여러분이 다음 큰 시간 여행 기계의 코드를 작성하는 사람이 될 수도 있습니다. 그 까지까지, 컴파일러를 뜨겁게 하고, 문법 오류를 차갑게 두세요!

Credits: Image by storyset