C++ 标准库提供了丰富的功能,其中 <ctime> 是处理时间和日期的标准库之一。它提供了一组函数,用于获取当前时间、日期以及执行时间相关的计算。<ctime> 库定义了一组与时间相关的函数和类型,这些函数和类型允许程序员在程序中处理时间。
关键组件
类型:
std::time_t:表示日历时间,通常是从某个固定时间点(如 Epoch,即 1970 年 1 月 1 日 00:00:00 UTC)到当前时间的秒数。
std::tm:表示分解时间,包含年、月、日、小时、分钟、秒等信息。
函数:
std::time:获取当前日历时间。
std::difftime:计算两个 std::time_t 值之间的差异(以秒为单位)。
std::mktime:将 std::tm 结构转换为 std::time_t 值(可能涉及时间标准化,如闰年调整)。
std::localtime:将 std::time_t 值转换为本地时间的 std::tm 结构。
std::gmtime:将 std::time_t 值转换为协调世界时(UTC)的 std::tm 结构。
std::strftime:将格式化的时间写入字符串。
示例:
获取当前时间并格式化为字符串
#include <iostream>
#include <ctime>
#include <iomanip>
int main() {
// 获取当前时间
std::time_t currentTime = std::time(nullptr);
// 转换为本地时间
std::tm* localTime = std::localtime(¤tTime);
// 格式化时间字符串
char buffer[100];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime);
// 输出时间字符串
std::cout << "Current local time: " << buffer << std::endl;
return 0;
}
计算两个时间点之间的差异
int main() {
// 定义两个时间点
std::tm time1 = {}, time2 = {};
time1.tm_year = 2023 - 1900; // 年份从1900年开始计数
time1.tm_mon = 0; // 月份从0开始计数(0代表1月)
time1.tm_mday = 1;
time1.tm_hour = 0;
time1.tm_min = 0;
time1.tm_sec = 0;
time2 = time1;
time2.tm_mday += 10; // 假设第二个时间是第一个时间后的10天
// 转换为time_t类型
std::time_t timeT1 = std::mktime(&time1);
std::time_t timeT2 = std::mktime(&time2);
// 计算差异(以秒为单位)
double difference = std::difftime(timeT2, timeT1);
// 输出差异(以天为单位)
std::cout << "Difference in days: " << difference / (60 * 60 * 24) << std::endl;
return 0;
}