📅  最后修改于: 2023-12-03 14:59:48.565000             🧑  作者: Mango
在 C++ 中,我们可以使用 time.h
头文件中的函数和 tm
结构来处理时间和日期。
tm
是 C++ 中用于表示日期和时间的结构体,其定义如下:
struct tm {
int tm_sec; // 秒 [0, 60]
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],0 表示星期天
int tm_yday; // 一年中的天 [0, 365]
int tm_isdst; // 夏令时标志,正数表示夏令时,0 表示不使用夏令时,负数表示未知
};
其中,tm_sec
是秒,tm_min
是分,tm_hour
是时,tm_mday
是一月中的天数,tm_mon
是月份(0-11,0 表示一月),tm_year
是年份(减去 1900),tm_wday
是星期几(0-6,0 表示星期天),tm_yday
是一年中的第几天,tm_isdst
是夏令时标志。
时间戳是指当前时间距离 Unix 元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数,通常用 time_t
类型表示。我们可以使用 time
函数来获取当前的时间戳,例如:
time_t now = time(nullptr);
上述代码将获取当前时间戳并保存在 now
变量中。注意,如果调用 time
函数的参数为 nullptr
,则返回的时间戳是当前的系统时间。
我们可以使用 strftime
函数将时间戳转换为指定格式的日期和时间字符串。其函数原型如下:
size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
其中,s
参数是指向一个字符数组的指针,用来存储格式化后的日期和时间字符串,maxsize
是字符数组的大小,format
是指定格式的日期和时间字符串,timeptr
是指向一个 tm
结构体的指针,表示待格式化的时间。
例如,以下代码可以将当前时间戳格式化为 %Y-%m-%d %H:%M:%S
格式的日期和时间字符串:
char buffer[80];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localtime(&now));
上述代码会将格式化后的日期和时间字符串保存在 buffer
数组中。
我们可以使用 strptime
函数将日期和时间字符串解析成一个 tm
结构体。其函数原型如下:
char *strptime(const char *s, const char *format, struct tm *tm);
其中,s
参数是待解析的日期和时间字符串,format
是指定格式的日期和时间字符串,tm
是用于存储解析结果的 tm
结构体。
例如,以下代码可以将日期和时间字符串 %Y-%m-%d %H:%M:%S
解析成一个 tm
结构体:
struct tm t;
strptime("2022-05-21 14:30:00", "%Y-%m-%d %H:%M:%S", &t);
上述代码会将解析后的日期和时间保存在 t
变量中。
C++ 中的 tm
结构可以用来表示日期和时间,time
函数可以获取当前时间戳,strftime
函数可以将时间戳格式化为指定格式的日期和时间字符串,strptime
函数可以将日期和时间字符串解析成 tm
结构体。了解和熟练掌握以上函数和概念,可以帮助我们更方便地处理日期和时间相关的操作。