Menu
×
   ❮     
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++ 向量 C++ 列表 C++ 堆栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++ 如何

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() 函数的另一种方法是传入一个空指针,并使用返回值。

time_t timestamp = time(NULL);

数据类型

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

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

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

  • tm_sec - 分钟内的秒数
  • tm_min - 小时内的分钟数
  • tm_hour - 一天中的小时数(从 0 到 23)
  • tm_mday - 月份中的日期
  • tm_mon - 月份(从 0 到 11,从 1 月开始)
  • tm_year - 自 1900 年以来的年数
  • tm_wday - 星期几(从 0 到 6,从星期日开始)
  • tm_yday - 一年中的日期(从 0 到 365,其中 0 是 1 月 1 日)
  • 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. 第一个参数指向将写入格式化日期的 char 数组。
  2. 第二个参数指定数组中的可用空间。
  3. 第三个参数允许我们使用格式说明符选择日期的格式。
  4. 最后一个参数是指向包含我们要显示的日期的日期时间结构的指针。

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

格式说明符 描述 示例
%a 星期的简短表示 Fri
%b 月份名称的简短表示 Dec
%B 月份名称的完整表示 December
%d 带前导零的月份中的天数 09
%e 带前导空格的月份中的天数  9
%H 24 小时制的小时 14
%I 12 小时制的小时 02
%M 小时内的分钟 30
%p AM 或 PM PM
%S 分钟内的秒 01
%y 两位数的年份表示 23
%Y 四位数的年份表示 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 参考



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.