C++ 日期 & 时间


C++ 将日期和时间表示为不同的数据类型,同时还提供了一些函数和类来操作它们。以下是一些常用的日期和时间类和函数。

时间类

time_t 类型

C++ 中的 time_t 类型可以存储从 1970 年 1 月 1 日至当前时间的秒数。可以使用 time() 函数获取当前时间的秒数。例如:

time_t now = time(0);

ctime() 函数

ctime() 函数将 time_t 表示的时间转换为人类可读的字符串格式。它返回一个代表日期和时间的 c-style 字符串。例如:

time_t now = time(0);
char* dt = ctime(&now);
cout << "当前时间:" << dt << endl;

gmtime() 和 localtime() 函数

gmtime() 函数将 time_t 表示的时间转换为世界标准时间,而 localtime() 函数将其转换为本地时间。它们都返回一个指向 tm 结构的指针,该结构包含有关日期和时间的马上细节信息。例如:

time_t now = time(0);
tm* localtm = localtime(&now);
cout << "本地时间:" << asctime(localtm) << endl;

mktime() 函数

mktime() 函数将 tm 结构转换为 time_t 类型的时间。例如:

tm timeinfo = {0};
timeinfo.tm_year = 2022 - 1900;  // 年份从1900年开始计算
timeinfo.tm_mon = 5 - 1;         // 月份从0开始计算,6月为5
timeinfo.tm_mday = 1;            // 日从1开始计算
time_t time = mktime(&timeinfo);
cout << "2022年5月1日的时间是:" << ctime(&time) << endl;

日期类

std::chrono::system_clock

std::chrono 库提供了表示时间和日期的类型和函数。std::chrono::system_clock(系统时钟)是一个实现了 Clock 概念的类,它提供了一种与系统时钟(如机器上的墙钟)关联的时间度量标准。例如:

auto now = std::chrono::system_clock::now();
time_t now_time = std::chrono::system_clock::to_time_t(now);
std::cout << "当前日期和时间:" << std::ctime(&now_time) << std::endl;

时间点

std::chrono::time_point 类表示一个时钟的时间点(即时钟基础上的一个时间值)。它可以用于表示日期和时间,也可以用于计算两个时间之间的差异。例如:

auto start = std::chrono::system_clock::now();
// some time-consuming task
auto end = std::chrono::system_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "时间花费:" << duration.count() << " 毫秒" << std::endl;

时间差

std::chrono::duration 表示时间的持续时间。它包含了一个单位(如秒、毫秒、微秒、纳秒等)和一个持续时间数量。例如:

auto seconds = std::chrono::duration_cast<std::chrono::seconds>(end - start);
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
auto nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);

以上就是 C++ 中关于日期和时间的常用类和函数,它们可以方便地帮助我们处理日期和时间相关的任务。