菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ If...Else C++ Switch C++ While 循环 C++ For 循环 C++ Break/Continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归

C++ 类

C++ OOP C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构与 STL C++ Vectors C++ List C++ Stacks C++ Queues C++ Deque C++ Sets C++ Maps C++ 迭代器 C++ 算法

C++ How To

C++ 两数相加 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 示例

C++ 示例 C++ 现实生活中的例子 C++ 编译器 C++ 练习 C++ 测验 C++ 证书


C++ 日期和时间


日期和时间

<ctime> 库允许我们处理日期和时间。

要使用它,您必须导入 <ctime> 头文件

示例

#include <ctime> // Import the ctime library

显示当前日期和时间

<ctime> 库提供了各种函数来测量日期和时间。

time() 函数为我们提供一个表示当前日期和时间的时间戳。我们可以使用 ctime() 函数来显示时间戳所代表的日期和时间

示例

显示当前日期

// Get the timestamp for the current date and time
time_t timestamp;
time(&timestamp);

// Display the date and time represented by the timestamp
cout << ctime(&timestamp);
自己动手试一试 »

使用 time() 函数的两种方式

time() 函数将时间戳写入参数给定的内存位置,但它也返回时间戳的值。

使用 time() 函数的另一种方法是传入一个 NULL 指针,并改用返回值。

time_t timestamp = time(NULL);

数据类型

有两种不同的数据类型用于存储日期和时间:用于时间戳time_t 和用于日期时间结构struct tm

时间戳将时间点表示为单个数字,这使得计算机更容易进行计算。

日期时间结构是表示日期和时间不同组成部分作为成员的结构体。这使得我们更容易指定日期。日期时间结构具有以下成员:

  • tm_sec - 分钟内的秒数
  • tm_min - 小时内的分钟数
  • tm_hour - 一天中的小时数(从 0 到 23)
  • tm_mday - 月份中的日期
  • tm_mon - 月份(从 0 到 11,1 月为 0)
  • tm_year - 自 1900 年以来的年数
  • tm_wday - 星期几(从 0 到 6,星期日为 0)
  • tm_yday - 一年中的天数(从 0 到 365,1 月 1 日为 0)
  • tm_isdst - 夏令时生效时为正,不生效时为零,未知时为负

请务必记住日期组成部分的表示方式

  • 小时以 24 小时制表示。晚上 11 点将表示为 23
  • 月份从 0 到 11。例如,12 月将表示为 11 而不是 12。
  • 年份相对于 1900 年表示。2024 年将表示为 124,因为自 1900 年以来已经过去了 124 年。

创建时间戳

time() 函数只能为当前日期创建时间戳,但我们可以使用 mktime() 函数为任何日期创建时间戳。

mktime() 函数将日期时间结构转换为时间戳。

示例

使用 mktime() 函数创建时间戳

struct tm datetime;
time_t timestamp;

datetime.tm_year = 2023 - 1900; // Number of years since 1900
datetime.tm_mon = 12 - 1; // Number of months since January
datetime.tm_mday = 17;
datetime.tm_hour = 12;
datetime.tm_min = 30;
datetime.tm_sec = 1;
// Daylight Savings must be specified
// -1 uses the computer's timezone setting
datetime.tm_isdst = -1;

timestamp = mktime(&datetime);

cout << ctime(&timestamp);
自己动手试一试 »

注意:mktime() 函数需要这些成员具有值:tm_yeartm_montm_mdaytm_hourtm_mintm_sectm_isdst


创建日期时间结构

mktime() 函数还会用正确的值填充日期时间结构的 tm_wdaytm_yday 成员,从而完成结构并提供有效的日期时间。例如,它可用于查找给定日期的星期几

示例

查找指定日期的星期几

// Create the datetime structure and use mktime to fill in the missing members
struct tm datetime;
datetime.tm_year = 2023 - 1900; // Number of years since 1900
datetime.tm_mon = 12 - 1; // Number of months since January
datetime.tm_mday = 17;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

string weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

cout << "The date is on a " << weekdays[datetime.tm_wday];
自己动手试一试 »

localtime()gmtime() 函数可以将时间戳转换为日期时间结构。

localtime() 函数返回一个指向表示计算机时区时间的结构的指针。

gmtime() 函数返回一个指向表示 GMT 时区时间的结构的指针。

这些函数返回一个指向日期时间结构的指针。如果我们想确保其值不会意外更改,我们应该通过解引用指针来复制它。要了解解引用,请参阅 C++ 解引用教程

示例

获取日期时间结构并输出当前小时

time_t timestamp = time(&timestamp);
struct tm datetime = *localtime(&timestamp);

cout << datetime.tm_hour;
自己动手试一试 »


显示日期

到目前为止,我们一直使用 ctime() 函数来显示时间戳中包含的日期。要从日期时间结构显示日期,我们可以使用 asctime() 函数。

示例

显示日期时间结构表示的日期

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

cout << asctime(&datetime);
自己动手试一试 »

注意:asctime() 函数不会纠正无效日期。例如,如果您将月份中的日期设置为 32,它将显示 32。mktime() 函数可以纠正这些类型的错误

示例

在显示日期之前纠正它

// Create the datetime structure and use mktime to correct mistakes
struct tm datetime;
datetime.tm_year = 2022 - 1900; // Number of years since 1900
datetime.tm_mon = 0; // 0 is January
datetime.tm_mday = 32;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

cout << asctime(&datetime);
自己动手试一试 »

ctime()asctime() 函数允许我们显示日期,但它们不允许我们选择如何显示它。

要选择如何显示日期,我们可以使用 strftime() 函数。

示例

以不同方式表示当前日期

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

char output[50];

strftime(output, 50, "%B %e, %Y", &datetime);
cout << output << "\n";

strftime(output, 50, "%I:%M:%S %p", &datetime);
cout << output << "\n";

strftime(output, 50, "%m/%d/%y", &datetime);
cout << output << "\n";

strftime(output, 50, "%a %b %e %H:%M:%S %Y", &datetime);
cout << output << "\n";
自己动手试一试 »

strftime() 函数格式化日期并将其作为 C 风格字符串写入 char 数组。它有四个参数

  1. 第一个参数指向将写入格式化日期的字符数组。
  2. 第二个参数指定数组中可用的空间。
  3. 第三个参数允许我们使用格式说明符选择如何格式化日期。
  4. 最后一个参数是指向包含我们要显示日期的日期时间结构的指针。

下表列出了一些有用的格式说明符。有关更完整的列表,请查看 strftime() 参考页面

格式说明符 描述 示例
%a 星期几的短表示 星期五
%b 月份名称的短表示 Dec
%B 月份名称的完整表示 十二月
%d 月份中的日期,带前导零 09
%e 月份中的日期,带前导空格  9
%H 小时的 24 小时制 14
%I 小时的 12 小时制 02
%M 小时内的分钟数 30
%p AM 或 PM PM
%S 分钟内的秒数 01
%y 2 位年份表示 23
%Y 4 位年份表示 2023

测量时间

有两种不同的函数可用于测量时间差。

difftime() 函数测量两个不同时间戳之间经过的秒数。这在测量日期之间的时间差时很有用。

示例

测量两个时间戳之间的时间差

time_t now;
time_t nextyear;
struct tm datetime;

now = time(NULL);
datetime = *localtime(&now);
datetime.tm_year = datetime.tm_year + 1;
datetime.tm_mon = 0;
datetime.tm_mday = 1;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.is_dst = -1;
nextyear = mktime(&datetime);

int diff = difftime(nextyear, now);

cout << diff << " seconds until next year";
自己动手试一试 »

clock() 函数对于在程序运行时测量短时间间隔很有用。它比 difftime() 函数更精确。

每次调用 `clock` 函数都会返回一种特殊类型的时间戳,以时钟(一个取决于库实现方式的时间单位)为单位,其数据类型为 `clock_t`。要测量时间差,请在两个不同时间点存储一个时间戳,然后将其相减。时间差以时钟为单位测量,但可以通过将其除以 `CLOCKS_PER_SEC` 常量将其转换为秒。

示例

测量程序运行所需的时间

clock_t before = clock();
int k = 0;
for(int i = 0; i < 100000; i++) {
  k += i;
}
clock_t duration = clock() - before;
cout << "Duration: " << (float)duration / CLOCKS_PER_SEC << " seconds";
自己动手试一试 »

注意:请务必在除法之前将值转换为 floatdouble 类型,否则可能会导致整数除法,从而截断小数部分。


完整的 <ctime> 参考

有关 <ctime> 函数的完整参考,请访问我们的 C++ ctime 参考



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持