C++ 날짜 및 시간


C++ 표준 라이브러리는 소위 날짜 유형을 제공하지 않습니다. C++는 날짜 및 시간 작업을 위한 C 언어의 구조와 기능을 상속합니다. 날짜 및 시간 관련 함수와 구조를 사용하려면 C++ 프로그램에서 <ctime> 헤더 파일을 참조해야 합니다.

시간 관련 유형에는 clock_t, time_t, size_ttm의 네 가지 유형이 있습니다. clock_t, size_t 및 time_t 유형은 시스템 시간과 날짜를 특정 정수로 나타냅니다.

구조체 유형 tm 날짜와 시간을 C 구조 형태로 저장합니다. tm 구조의 정의는 다음과 같습니다.

struct tm {
  int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61
  int tm_min;   // 分,范围从 0 到 59
  int tm_hour;  // 小时,范围从 0 到 23
  int tm_mday;  // 一月中的第几天,范围从 1 到 31
  int tm_mon;   // 月,范围从 0 到 11
  int tm_year;  // 自 1900 年起的年数
  int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起
  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起
  int tm_isdst; // 夏令时
}

다음은 C/C++에서 날짜와 시간에 관한 중요한 함수입니다. 이 모든 함수는 C/C++ 표준 라이브러리의 일부입니다. C++ 표준 라이브러리에서 각 함수의 세부 정보를 확인할 수 있습니다.

일련 번호기능 및 설명
1time_t time(time_t *time);
이 함수는 시스템의 현재 달력 시간, 즉 1월 1일 이후 경과된 초 수를 반환합니다. 1970년. 시스템에 시간이 없으면 .1이 반환됩니다.
2char *ctime(const time_t *time);
이것은 문자열 일 월 연 시:분:초 연도 형식으로 현지 시간을 나타내는 문자열 포인터를 반환합니다.

현재 날짜 및 시간

아래 예에서는 현지 시간 및 협정 세계시(UTC)를 포함하여 현재 시스템 날짜 및 시간을 가져옵니다.

#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
   // 基于当前系统的当前日期/时间
   time_t now = time(0);
   
   // 把 now 转换为字符串形式
   char* dt = ctime(&now);

   cout << "本地日期和时间:" << dt << endl;

   // 把 now 转换为 tm 结构
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "UTC 日期和时间:"<< dt << endl;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

本地日期和时间:Sat Jan  8 20:07:41 2011

UTC 日期和时间:Sun Jan  9 03:07:41 2011

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

tm 구조는 C/C++에서 날짜 및 시간 관련 작업을 처리할 때 특히 중요합니다. tm 구조는 날짜와 시간을 C 구조로 유지합니다. 대부분의 시간 관련 함수는 tm 구조를 사용합니다. 다음 예에서는 tm 구조와 다양한 날짜 및 시간 관련 함수를 사용합니다.

구조 사용을 연습하기 전에 C 구조에 대한 기본적인 이해가 있어야 하며 화살표 -> 연산자를 사용하여 구조 멤버에 액세스하는 방법을 알아야 합니다.

#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
   // 基于当前系统的当前日期/时间
   time_t now = time(0);

   cout << "Number of sec since January 1,1970:" << now << endl;

   tm *ltm = localtime(&now);

   // 输出 tm 结构的各个组成部分
   cout << "Year: "<< 1900 + ltm->tm_year << endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<<  ltm->tm_mday << endl;
   cout << "Time: "<< 1 + ltm->tm_hour << ":";
   cout << 1 + ltm->tm_min << ":";
   cout << 1 + ltm->tm_sec << endl;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Number of sec since January 1, 1970:1294548238
Year: 2011
Month: 1
Day: 8
Time: 22: 44:59