C++ 日期和时间
C++ 标准库没有提供合适的日期类型。C++ 继承了 C 语言中用于日期和时间操作的结构体和函数。要访问与日期和时间相关的函数和结构体,您需要在 C++ 程序中包含 <ctime> 头文件。
有四种与时间相关的类型:clock_t、time_t、size_t 和 tm。 clock_t、size_t 和 time_t 类型能够将系统时间和日期表示为某种整数。
结构体类型 tm 以 C 结构体 的形式保存日期和时间,该结构体包含以下元素:
struct tm { int tm_sec; // 分钟中的秒数,范围从 0 到 61 int tm_min; // 小时中的分钟数,范围从 0 到 59 int tm_hour; // 小时中的小时数,范围从 0 到 24 int tm_mday; // 月份中的日期,范围从 1 到 31 int tm_mon; // 月份,范围从 0 到 11 int tm_year; // 自 1900 年以来的年份 int tm_wday; // 自星期日以来的天数 int tm_yday; // 自 1 月 1 日以来的天数 int tm_isdst; // 夏令时小时数 }
以下是在 C 或 C++ 中处理日期和时间时使用的重要函数。所有这些函数都是标准 C 和 C++ 库的一部分,您可以参考下面提供的 C++ 标准库来查看它们的详细信息。
Sr.No | 函数 &用途 |
---|---|
1 | time_t time(time_t *time); 返回系统当前日历时间,以自 1970 年 1 月 1 日以来的秒数表示。如果系统没有时间,则返回 .1。 |
2 | char *ctime(const time_t *time); 返回一个指向格式为 day month year hours:minutes:seconds year \0 的字符串的指针。 |
3 | struct tm *localtime(const time_t *time); 这将返回一个指向表示本地时间的 tm 结构的指针。 |
4 | clock_t clock(void); 这将返回一个近似值,该值表示调用程序已运行的时间。如果时间不可用,则返回值 .1。 |
5 | char * asctime ( const struct tm * time ); 这将返回一个指向字符串的指针,该字符串包含 time 指向的结构体中存储的信息,并转换为以下形式:日 月 日 时:分:秒 年 \0 |
6 | struct tm *gmtime(const time_t *time); 这将返回一个指向 tm 结构体中时间的指针。该时间以协调世界时 (UTC) 表示,本质上是格林威治标准时间 (GMT)。 |
7 | time_t mktime(struct tm *time); 这将返回 time 指向的结构体中时间的日历时间等效值。 |
8 | double difftime ( time_t time2, time_t time1 ); 此函数计算 time1 和 time2 之间的秒差。 |
9 | size_t strftime(); 此函数可用于将日期和时间格式化为特定格式。 |
当前日期和时间
假设您要检索当前系统日期和时间,可以是本地时间或协调世界时 (UTC)。
示例
以下是实现相同功能的示例 -
#include <iostream> #include <ctime> using namespace std; int main() { // 基于当前系统的当前日期/时间 time_t now = time(0); // 将 now 转换为字符串形式 char* dt = ctime(&now); cout << "The local date and time is: " << dt << endl; // 现在转换为 UTC 的 tm 结构 tm *gmtm = gmtime(&now); dt = asctime(gmtm); cout << "The UTC date and time is:"<< dt << endl; }
当编译并执行上述代码时,它会产生以下结果 -
The local date and time is: Sat Jan 8 20:07:41 2011 The UTC date and time is:Sun Jan 9 03:07:41 2011
使用 tm 结构体格式化时间
在 C 或 C++ 中处理日期和时间时,tm 结构体非常重要。如上所述,该结构体以 C 结构体的形式保存日期和时间。大多数与时间相关的函数都使用 tm 结构体。以下示例使用了各种与日期和时间相关的函数以及 tm 结构体 -
在本章中使用结构体时,我假设您对 C 结构体以及如何使用箭头 -> 运算符访问结构体成员有基本的了解。
示例
#include <iostream> #include <ctime> using namespace std; int main() { // 基于当前系统的当前日期/时间 time_t now = time(0); cout << "Number of sec since January 1,1970 is:: " << now << endl; tm *ltm = localtime(&now); // 打印 tm 结构的各个组成部分。 cout << "Year:" << 1900 + ltm->tm_year<<endl; cout << "Month: "<< 1 + ltm->tm_mon<< endl; cout << "Day: "<< ltm->tm_mday << endl; cout << "Time: "<< 5+ltm->tm_hour << ":"; cout << 30+ltm->tm_min << ":"; cout << ltm->tm_sec << endl; }
当编译并执行上述代码时,它会产生以下结果 -
Number of sec since January 1,1970 is:: 1588485717 Year:2020 Month: 5 Day: 3 Time: 11:31:57