时间累加及时间格式化输出
有些应用场景需要获取到系统时间或者文件创建时间,并在此基础上计时,获取更新后的时间。此时可以搭配使用std::time_t
及std::tm
结构体
struct tm
{
int tm_sec; // seconds after the minute - [0, 60] including leap second
int tm_min; // minutes after the hour - [0, 59]
int tm_hour; // hours since midnight - [0, 23]
int tm_mday; // day of the month - [1, 31]
int tm_mon; // months since January - [0, 11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday - [0, 6]
int tm_yday; // days since January 1 - [0, 365]
int tm_isdst; // daylight savings time flag
};
注意std::tm
中的年份为从1900开始过去的年数,而time_t是C和C++中用来表示时间的一种数据类型。它通常是一个整数类型,表示自1970年1月1日UTC(协调世界时)以来经过的秒数。这个日期和时间被称为UNIX纪元(Unix Epoch)或POSIX时间。
具体应用起来的流程如下:
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
// 函数:将 std::time_t 转换为字符串格式
std::string timeToString(std::time_t time) {
std::tm* localTime = std::localtime(&time);
std::ostringstream oss;
oss << std::put_time(localTime, "%Y-%m-%d %H:%M:%S");
return oss.str();
}
int main() {
// 获取当前系统时间
std::chrono::system_clock::time_point currentTime = std::chrono::system_clock::now();
std::time_t currentTime_t = std::chrono::system_clock::to_time_t(currentTime);
// 将当前时间转换为 std::tm 结构体
std::tm* currentTime_tm = std::localtime(¤tTime_t);
// 累加一定时间间隔
currentTime_tm->tm_hour += 24; // 增加24小时
// 将累加后的时间转换为字符串格式并输出
// mktime如果发生了进位,则进行进位操作
std::string newTimeStr = timeToString(std::mktime(currentTime_tm));
std::cout << "累加后的时间: " << newTimeStr << std::endl;
return 0;
}