亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++日期时间完全指南:ctime库、tm结构体与格式化输出

C++标准库无专属日期类型,继承C语言<ctime>头文件中的结构体与函数处理日期时间。

四大时间相关类型:clock_t、time_t、size_t、tm。前三者以整数形式表示系统时间/日期;tm结构体以字段形式拆解日期时间:

struct tm {
    int tm_sec;   // 秒 [0,61]
    int tm_min;   // 分 [0,59]
    int tm_hour;  // 时 [0,23]
    int tm_mday;  // 日 [1,31]
    int tm_mon;   // 月 [0,11] (0=1月)
    int tm_year;  // 年(从1900起算)
    int tm_wday;  // 周日以来天数 [0,6]
    int tm_yday;  // 1月1日起天数 [0,365]
    int tm_isdst; // 夏令时标志
};

核心时间函数速查(均在<ctime>)

序号函数与用途
1

time_t time(time_t *time)

返回自1970-01-01 00:00:00 UTC的秒数(时间戳)。失败返回-1。

2

char *ctime(const time_t *time)

将time_t转为字符串:day month year hh:mm:ss year\n\0。

3

struct tm *localtime(const time_t *time)

将time_t转为本地时间tm结构指针。

4

clock_t clock(void)

返回程序运行CPU时钟嘀嗒数。不可用返回-1。

5

char *asctime(const struct tm *time)

将tm结构转为同格式字符串。

6

struct tm *gmtime(const time_t *time)

转为UTC(格林威治时间)tm结构指针。

7

time_t mktime(struct tm *time)

将tm结构转为time_t(日历时间)。

8

double difftime(time_t time2, time_t time1)

返回time2-time1的秒数差。

9

size_t strftime(...)

按指定格式化日期时间字符串。

获取当前本地时间与UTC

#include <iostream>
#include <ctime>
using namespace std;
int main() {
    time_t now = time(0);
    char* dt = ctime(&now);
    cout << "本地时间: " << dt << endl;
    tm *gmtm = gmtime(&now);
    dt = asctime(gmtm);
    cout << "UTC时间: " << dt << endl;
    return 0;
}

示例输出:

本地时间: Sat Jan 8 20:07:41 2011
UTC时间: Sun Jan 9 03:07:41 2011

使用tm结构体拆解/格式化时间

tm结构是日期时间操作核心。假设读者掌握C结构体与->运算符。演示:

#include <iostream>
#include <ctime>
using namespace std;
int main() {
    time_t now = time(0);
    cout << "距1970-01-01秒数: " << now << endl;
    tm *ltm = localtime(&now);
    cout << "年: " << 1900 + ltm->tm_year << endl;
    cout << "月: " << 1 + ltm->tm_mon << endl;
    cout << "日: " << ltm->tm_mday << endl;
    cout << "时间: " << ltm->tm_hour << ":"
         << ltm->tm_min << ":" << ltm->tm_sec << endl;
    return 0;
}

输出示例:

距1970-01-01秒数: 1588485717
年: 2020
月: 5
日: 3
时间: 11:31:57

注意:tm_year需加1900,tm_mon需加1,tm_hour等直接使用。

C语言

  1. 计算电抗直流电路中的电压与电流
  2. C++结构体与类:嵌入式开发者实战指南
  3. 掌握 C++ 变量、字面量与常量:核心概念与实战指南
  4. C++类与对象:面向对象编程实战指南
  5. C++ 动态内存管理:new 与 delete 专家级实战指南
  6. C++ 三种继承方式深度解析:public、protected 与 private
  7. C++ 友元函数与友元类:突破访问控制的利器
  8. C++重载机制深度解析:函数重载与运算符重载全攻略
  9. C++文件I/O完全指南:fstream读写、打开模式、定位指针与完整实例
  10. Python 获取当前日期和时间:实用指南
  11. Python 日期时间处理实战:time 与 calendar 模块完全指南
  12. Java 8 全新日期时间 API:线程安全、设计优雅、时区处理轻松搞定