<ctime> 是 C++ 标准库中的一个头文件,提供了与时间和日期相关的功能。它包含了多个函数和类型,用于获取系统时间、格式化时间、时间间隔计算等。<ctime> 的功能为程序员提供了操作时间和日期的基本工具。

目录

  1. <ctime> 头文件简介
  2. 时间和日期类型
  3. 获取和设置时间
  4. 时间格式化和转换
  5. 时间计算
  6. 常用时间函数
  7. 结论

1. <ctime> 头文件简介

<ctime> 提供了一组用于处理和操作时间的函数。它定义了时间类型(如 std::time_tstd::tm)以及相关的操作函数。这些函数可以帮助你获取当前的系统时间、转换时间、格式化时间等。

为了使用这些功能,你需要在代码中包含 <ctime> 头文件:

#include <ctime>


2. 时间和日期类型

2.1 std::time_t

std::time_t 是 C++ 中用于表示时间的基本数据类型。它通常表示自某个基准时间(如 UNIX 时间戳的 1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。

示例:

#include <iostream>
#include <ctime>

int main() {
    std::time_t now = std::time(0);  // 获取当前时间
    std::cout << "Current time: " << now << " seconds since the epoch." << std::endl;
    return 0;
}

输出:

Current time: 1617357600 seconds since the epoch.


2.2 std::tm

std::tm 是一个结构体,用于表示更为详细的时间信息,包括年、月、日、小时、分钟、秒等。该结构体的成员包括:

  • tm_sec:秒,范围 0-59。
  • tm_min:分钟,范围 0-59。
  • tm_hour:小时,范围 0-23。
  • tm_mday:日,范围 1-31。
  • tm_mon:月,范围 0-11(0 代表 1 月)。
  • tm_year:年,距离 1900 年的年份(例如 2021 年是 121)。
  • tm_wday:星期几,范围 0-6(0 代表星期天)。
  • tm_yday:一年中的天数,范围 0-365。
  • tm_isdst:夏令时标志,正值表示夏令时。

3. 获取和设置时间

3.1 获取当前时间

可以使用 std::time() 获取当前的系统时间,并将其返回为 std::time_t 类型的值。此外,std::time() 还可以用来获取自 Unix 纪元(1970 年 1 月 1 日)以来的秒数。

示例:

#include <iostream>
#include <ctime>

int main() {
    std::time_t now = std::time(0);  // 获取当前时间
    std::cout << "Current time (in seconds): " << now << std::endl;
    return 0;
}

输出:

Current time (in seconds): 1617357600

3.2 获取日期和时间信息

要获取更为详细的日期和时间信息,可以使用 std::localtime()std::gmtime()std::time_t 转换为 std::tm 结构体。

  • std::localtime():将时间转换为本地时间。
  • std::gmtime():将时间转换为 UTC 时间。

示例:

#include <iostream>
#include <ctime>

int main() {
    std::time_t now = std::time(0);  // 获取当前时间
    std::tm* local_time = std::localtime(&now);

    std::cout << "Local time: " << (local_time->tm_year + 1900) << "-" 
              << (local_time->tm_mon + 1) << "-" << local_time->tm_mday << " "
              << local_time->tm_hour << ":" << local_time->tm_min << ":" 
              << local_time->tm_sec << std::endl;

    return 0;
}

输出:

Local time: 2021-4-4 13:30:45


4. 时间格式化和转换

4.1 格式化时间输出

std::strftime() 函数可以用来格式化 std::tm 结构体中的时间信息为字符串输出。它需要提供一个格式字符串和 std::tm 结构体。

格式化符号包括:

  • %Y:年份(四位数)
  • %m:月份(01-12)
  • %d:日(01-31)
  • %H:小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)

示例:

#include <iostream>
#include <ctime>

int main() {
    std::time_t now = std::time(0);  // 获取当前时间
    std::tm* local_time = std::localtime(&now);

    char buffer[80];
    std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_time);
    std::cout << "Formatted time: " << buffer << std::endl;

    return 0;
}

输出:

Formatted time: 2021-04-04 13:30:45

4.2 从字符串转换时间

std::strptime() 函数可以用来从格式化的字符串中提取时间,并将其存储在 std::tm 结构体中。

示例:

#include <iostream>
#include <ctime>

int main() {
    const char* time_str = "2021-04-04 13:30:45";
    std::tm tm = {};
    std::strptime(time_str, "%Y-%m-%d %H:%M:%S", &tm);
    
    std::cout << "Year: " << (tm.tm_year + 1900) << std::endl;
    std::cout << "Month: " << (tm.tm_mon + 1) << std::endl;
    std::cout << "Day: " << tm.tm_mday << std::endl;
    std::cout << "Hour: " << tm.tm_hour << std::endl;
    std::cout << "Minute: " << tm.tm_min << std::endl;
    std::cout << "Second: " << tm.tm_sec << std::endl;

    return 0;
}

输出:

Year: 2021
Month: 4
Day: 4
Hour: 13
Minute: 30
Second: 45


5. 时间计算

时间的加减可以通过 std::difftime() 来进行计算,std::difftime() 返回的是两个时间点之间的差值(单位为秒)。此外,可以使用 std::mktime()std::tm 结构体转化为 std::time_t,从而进行时间计算。

示例:

#include <iostream>
#include <ctime>

int main() {
    std::time_t now = std::time(0);
    std::time_t future_time = now + 3600;  // 当前时间加一个小时(3600秒)

    std::cout << "Current time: " << now << std::endl;
    std::cout << "Future time (1 hour later): " << future_time << std::endl;

    double seconds_diff = std::difftime(future_time, now);
    std::cout << "Difference in seconds: " << seconds_diff << std::endl;

    return 0;
}

输出:

Current time: 1617357600
Future time (1 hour later): 1617361200
Difference in seconds: 3600


6. 常用时间函数

  • std::time(): 获取当前时间(返回秒数)。
  • std::localtime(): 将 std::time_t 转换为本地时间。
  • std::gmtime(): 将 std::time_t 转换为 UTC 时间。
  • std::strftime(): 格式化 std::tm 为字符串。
  • std::mktime(): 将 std::tm 转换为 std::time_t
  • std::difftime(): 计算两个时间点之间的差值。

7. 结论

<ctime> 提供了一套全面的工具用于处理时间和日期。它不仅支持获取当前时间、格式化时间、时间转换等功能,还能够执行时间的加减操作。掌握这些功能,可以帮助你在 C++ 程序中高效处理和操作时间数据。

推荐阅读: