<ctime>
是 C++ 标准库中的一个头文件,提供了与时间和日期相关的功能。它包含了多个函数和类型,用于获取系统时间、格式化时间、时间间隔计算等。<ctime>
的功能为程序员提供了操作时间和日期的基本工具。
目录
1. <ctime>
头文件简介
<ctime>
提供了一组用于处理和操作时间的函数。它定义了时间类型(如 std::time_t
和 std::tm
)以及相关的操作函数。这些函数可以帮助你获取当前的系统时间、转换时间、格式化时间等。
为了使用这些功能,你需要在代码中包含 <ctime>
头文件:
#include <ctime>
2. 时间和日期类型
2.1 std::time_t
std::time_t
是 C++ 中用于表示时间的基本数据类型。它通常表示自某个基准时间(如 UNIX 时间戳的 1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。
示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t now = std::time(0); // 获取当前时间
std::cout << "Current time: " << now << " seconds since the epoch." << std::endl;
return 0;
}
输出:
Current time: 1617357600 seconds since the epoch.
2.2 std::tm
std::tm
是一个结构体,用于表示更为详细的时间信息,包括年、月、日、小时、分钟、秒等。该结构体的成员包括:
tm_sec
:秒,范围 0-59。tm_min
:分钟,范围 0-59。tm_hour
:小时,范围 0-23。tm_mday
:日,范围 1-31。tm_mon
:月,范围 0-11(0 代表 1 月)。tm_year
:年,距离 1900 年的年份(例如 2021 年是 121)。tm_wday
:星期几,范围 0-6(0 代表星期天)。tm_yday
:一年中的天数,范围 0-365。tm_isdst
:夏令时标志,正值表示夏令时。
3. 获取和设置时间
3.1 获取当前时间
可以使用 std::time()
获取当前的系统时间,并将其返回为 std::time_t
类型的值。此外,std::time()
还可以用来获取自 Unix 纪元(1970 年 1 月 1 日)以来的秒数。
示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t now = std::time(0); // 获取当前时间
std::cout << "Current time (in seconds): " << now << std::endl;
return 0;
}
输出:
Current time (in seconds): 1617357600
3.2 获取日期和时间信息
要获取更为详细的日期和时间信息,可以使用 std::localtime()
或 std::gmtime()
将 std::time_t
转换为 std::tm
结构体。
std::localtime()
:将时间转换为本地时间。std::gmtime()
:将时间转换为 UTC 时间。
示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t now = std::time(0); // 获取当前时间
std::tm* local_time = std::localtime(&now);
std::cout << "Local time: " << (local_time->tm_year + 1900) << "-"
<< (local_time->tm_mon + 1) << "-" << local_time->tm_mday << " "
<< local_time->tm_hour << ":" << local_time->tm_min << ":"
<< local_time->tm_sec << std::endl;
return 0;
}
输出:
Local time: 2021-4-4 13:30:45
4. 时间格式化和转换
4.1 格式化时间输出
std::strftime()
函数可以用来格式化 std::tm
结构体中的时间信息为字符串输出。它需要提供一个格式字符串和 std::tm
结构体。
格式化符号包括:
%Y
:年份(四位数)%m
:月份(01-12)%d
:日(01-31)%H
:小时(00-23)%M
:分钟(00-59)%S
:秒(00-59)
示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t now = std::time(0); // 获取当前时间
std::tm* local_time = std::localtime(&now);
char buffer[80];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_time);
std::cout << "Formatted time: " << buffer << std::endl;
return 0;
}
输出:
Formatted time: 2021-04-04 13:30:45
4.2 从字符串转换时间
std::strptime()
函数可以用来从格式化的字符串中提取时间,并将其存储在 std::tm
结构体中。
示例:
#include <iostream>
#include <ctime>
int main() {
const char* time_str = "2021-04-04 13:30:45";
std::tm tm = {};
std::strptime(time_str, "%Y-%m-%d %H:%M:%S", &tm);
std::cout << "Year: " << (tm.tm_year + 1900) << std::endl;
std::cout << "Month: " << (tm.tm_mon + 1) << std::endl;
std::cout << "Day: " << tm.tm_mday << std::endl;
std::cout << "Hour: " << tm.tm_hour << std::endl;
std::cout << "Minute: " << tm.tm_min << std::endl;
std::cout << "Second: " << tm.tm_sec << std::endl;
return 0;
}
输出:
Year: 2021
Month: 4
Day: 4
Hour: 13
Minute: 30
Second: 45
5. 时间计算
时间的加减可以通过 std::difftime()
来进行计算,std::difftime()
返回的是两个时间点之间的差值(单位为秒)。此外,可以使用 std::mktime()
将 std::tm
结构体转化为 std::time_t
,从而进行时间计算。
示例:
#include <iostream>
#include <ctime>
int main() {
std::time_t now = std::time(0);
std::time_t future_time = now + 3600; // 当前时间加一个小时(3600秒)
std::cout << "Current time: " << now << std::endl;
std::cout << "Future time (1 hour later): " << future_time << std::endl;
double seconds_diff = std::difftime(future_time, now);
std::cout << "Difference in seconds: " << seconds_diff << std::endl;
return 0;
}
输出:
Current time: 1617357600
Future time (1 hour later): 1617361200
Difference in seconds: 3600
6. 常用时间函数
std::time()
: 获取当前时间(返回秒数)。std::localtime()
: 将std::time_t
转换为本地时间。std::gmtime()
: 将std::time_t
转换为 UTC 时间。std::strftime()
: 格式化std::tm
为字符串。std::mktime()
: 将std::tm
转换为std::time_t
。std::difftime()
: 计算两个时间点之间的差值。
7. 结论
<ctime>
提供了一套全面的工具用于处理时间和日期。它不仅支持获取当前时间、格式化时间、时间转换等功能,还能够执行时间的加减操作。掌握这些功能,可以帮助你在 C++ 程序中高效处理和操作时间数据。
推荐阅读:
发表回复