1.C++中的时间和日期

  • C++标准库没有提供所谓的日期类型,C++继承了C语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在C++程序中引用"ctime"头文件。有四个与时间相关的类型:clock_t,time_t,size_t,tm。类型clock_t,size_t,time_t能够把系统时间和日期表示为某种整数;结构体类型tm把时间和日期以C结构体的形式保存,tm结构体的定义如下:

        struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时};
    
  • 下面是C/C++中关于日期和时间的重要函数。所有这些函数都是C/C++标准库的组成部分,可以在C++标准库中查看一下各个函数的细节:
  • 1.1 C库函数–time()
    • 描述:C库函数time_t time(time_t *seconds)返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果seconds不为空,则返回值也存储在变量seconds中。
    • 声明:time_t time(time_t *t);
    • 参数:seconds–指针类型为time_t的对象的指针,用来存储seconds的值
    • 返回值:以time_t对象返回当前日历的时间
    • 实例如下:
          #include "iostream"#include "ctime"   // C++中没有处理时间的库,所以继承自C语言#include "cstdio"time_t seconds;seconds = time(NULL);cout << "自1970-01-01起的小时数: " << seconds / 3600 << endl;
      
  • 1.2 C库函数–ctime()
    • 描述:C库函数char *ctime(const time_t *timer) 返回一个表示当地时间的字符串,当地时间是基于参数timer。返回的字符串格式如下:Www Mmm dd hh:mm:ss yyyy其中,Www表示星期几,Mmm是以字母表示的月份,dd表示一月中的第几天,hh:mm:ss表示时间,yyyy表示年份。
    • 声明: char *ctime(const time_t *timer); 指针函数
    • 参数: 指向time_t对象的指针,该对象包含一个日历时间
    • 返回值:该函数返回一个 C 字符串,该字符串包含了可读格式的日期和时间信息。
    • 实例如下:
          time_t curtime;time(&curtime);cout << "当前时间: " << ctime(&curtime) << endl;
      
  • 1.3 C库函数–localtime()
    • 描述:C库函数struct tm *localtime(const time_t *timer)使用timer的值来填充tm结构。timer的值被分解为tm结构体,并用本地时区表示。
    • 声明:struct tm *localtime(const time_t *timer)
    • 参数:timer是指向表示日历时间的time_t值的指针
    • 返回值:该函数返回指向 tm 结构的指针,该结构带有被填充的时间信息。下面是 tm 结构的细节:
          struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时};
      
    • 实例如下:
          time_t rawtime;struct tm *info;char buffer[80];time(&rawtime);info = localtime(&rawtime);cout << "当前的本地时间和日期: " << asctime(info) << endl;
      
  • 1.4 C库函数–clock()
    • 描述:C库函数clock_t clock(void)返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,您需要除CLOCKS_PER_SEC。在32位系统中,CLOCKS_PER_SEC=1000000,该函数大约每72分钟会返回相同的值。
    • 声明:clock_t clock(void)
    • 参数:无
    • 实例如下:
          clock_t start_t, end_t;double total_t;int i;start_t = clock();cout << "程序启动, start_t = " << start_t << endl;cout << "开始一个大循环, start_t = " << start_t << endl;for (i = 0; i < 10000000; i++){}end_t = clock();cout << "大循环结束,end_t = " << end_t << endl;total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;cout << "cpu占用的总时间: " << total_t << endl;cout << "程序结束,退出...\n";
      
  • 1.5 C库函数–asctime()
    • 描述:C库函数char *asctime(const struct tm *timeptr)返回一个指向字符串的指针,它代表了结构体struct timeptr的日期和时间
    • 声明:char *asctime(const struct tm *timeptr);
    • 参数:timeptr是指向tm结构体的指针,包含了分解为如下各部分的日历时间:
          struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时};
      
    • 返回值:该函数返回一个C字符串,包含了可读格式的日期和时间信息Www Mmm dd hh:mm:ss yyyy,其中,Www表示星期几,Mmm是以字母表示的月份,dd表示一月中的第几天,hh:mm:ss表示时间,yyyy表示年份。
    • 实例如下:
          struct tm t;t.tm_sec = 10;t.tm_min = 10;t.tm_hour = 6;t.tm_mday = 25;t.tm_mon = 2;t.tm_year = 89;t.tm_wday = 6;puts(asctime(&t));
      
  • 1.6 C库函数–gmtime()
    • 描述:C库函数struct tm *gmtime(const time_t *timer) 使用timer的值来填充tm结构体,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
    • 声明:struct tm *gmtime(const time_t *timer);
    • 参数:timeptr是指向表示日历时间的 time_t 值的指针
    • 该函数返回指向tm结构的指针,该结构带有被填充的时间信息。下面是timeptr结构体的细节:
          struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时};
      
    • 实例如下:
          time_t raw_time;struct tm *info1;time(&raw_time);/* 获取 GMT 时间 */info = gmtime(&raw_time );printf("伦敦:%2d:%02d\n", (info1->tm_hour + BST)%24, info1->tm_min);printf("中国:%2d:%02d\n", (info1->tm_hour + CCT)%24, info1->tm_min);
      
  • 1.7 C库函数–mktime()
    • 描述:C库函数time_t mktime(struct tm *timeptr) 把 timeptr所指向的结构体转换为一个依据本地时区的time_t值
    • 声明:time_t mktime(struct tm *timeptr);
    • 参数:timeptr是指向表示日历时间的time_t值的指针,该日历时间被分解为以下各部分。下面是 timeptr 结构的细节:
          struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时};
      
    • 返回值:该函数返回一个time_t值,该值对应于以参数传递的日历时间。如果发生错误,则返回 -1 值
    • 实例如下:
          time_t raw_time1;struct tm * timeinfo;int year,month,day;const char * weekday[] = {"周日", "周一","周二", "周三","周四", "周五", "周六"};/* 用户输入日期 */printf ("请输入哪年: "); fflush(stdout); scanf ("%d",&year);printf ("请输入哪月: "); fflush(stdout); scanf ("%d",&month);printf ("请输入哪日: "); fflush(stdout); scanf ("%d",&day);/* 获取当前时间信息,并修改用户输入的输入信息 */time ( &raw_time1 );timeinfo = localtime ( &raw_time1 );timeinfo->tm_year = year - 1900;timeinfo->tm_mon = month - 1;timeinfo->tm_mday = day;/* 调用 mktime: timeinfo->tm_wday  */mktime ( timeinfo );printf ("那一天是:%s\n", weekday[timeinfo->tm_wday]);
      
  • 1.8 C库函数–difftime()
    • 描述:C库函数 double difftime(time_t time1, time_t time2)返回time1 和time2之间相差的秒数(time1 - time2)。这两个时间是在日历时间中指定的,表示了自纪元Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的时间。
    • 声明:double difftime(time_t time1, time_t time2);
    • 参数:time1是表示结束时间的time_t对象,time2是表示开始时间的time_t对象
    • 返回值:该函数返回以双精度浮点型double值表示的两个时间之间相差的秒数 (time2 - time1)
    • 实例如下:
          time_t start_t1, end_t1;double diff_t1;cout << "程序启动\n";time(&start_t1);cout << "休眠1000s\n";Sleep(1000);time(&end_t1);diff_t1 = difftime(end_t1, start_t1);cout << "执行时间: " << diff_t1<< endl;cout << "程序退出\n";
      
  • 1.9 C库函数–strftime()
    • 描述:C库函数size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)根据format中定义的格式化规则,格式化结构体timeptr表示的时间,并把它存储在str中。
    • 声明:size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
    • 参数:
      • str是指向目标数组的指针,用来复制产生的C字符串
      • maxsize是被复制到str的最大字符数
      • format是C字符串,包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示tm中所指定时间的相对应值。格式说明符是:

      • timeptr是指向tm结构体的指针,该结构包含了一个被分解为以下各部分的日历时间:
            struct tm{int tm_sec;   // 秒,正常范围从 0 到 59,但允许至 61int tm_min;  // 分,范围从 0 到 59int tm_hour;  // 小时,范围从 0 到 23int tm_mday;  // 一月中的第几天,范围从 1 到 31int tm_mon;   // 月,范围从 0 到 11int tm_year;  // 自 1900 年起的年数int tm_wday;  // 一周中的第几天,范围从 0 到 6,从星期日算起  int tm_yday;  // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst;  // 夏令时
        };
        
      • 实例如下:
            time_t raw_time3;struct tm *info3;char buffer[80];time( &raw_time3 );info3 = localtime( &raw_time3 );strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info3);printf("格式化的日期 & 时间 : |%s|\n", buffer);
        

2.当前时间和日期

  • 下面的实例获取当前系统的日期和时间,包括本地时间和协调世界时(UTC)

        // 2.当前日期和时间time_t now = time(0);// 把 now 转换为字符串形式char* dt = ctime(&now);cout << "本地日期和时间:" << dt << endl;// 把 now 转换为 tm 结构tm *gmtm = gmtime(&now);dt = asctime(gmtm);cout << "UTC日期和时间:"<< dt << endl;
    

3.使用结构体tm格式化时间

  • tm结构体在C/C++中处理日期和时间相关的操作时,显得尤为重要。tm结构体以C结构体的形式保存日期和时间。大多数与时间相关的函数都使用了tm结构体。下面的实例使用了tm结构体和各种与日期和时间相关的函数。在练习使用结构之前,需要对C结构体有基本的了解,并懂得如何使用箭头s->运算符来访问结构成员。

        // 3.使用结构tm格式化时间time_t now = time(0);  //  基于当前系统的当前日期/时间cout << "1970 到目前经过秒数:" << now << endl;tm *ltm = localtime(&now);// 输出 tm 结构的各个组成部分cout << "年: "<< 1900 + ltm->tm_year << endl;cout << "月: "<< 1 + ltm->tm_mon<< endl;cout << "日: "<<  ltm->tm_mday << endl;cout << "时间: "<< ltm->tm_hour << ":";cout << ltm->tm_min << ":";cout << ltm->tm_sec << endl;
    

C++中的日期和时间相关推荐

  1. 【转】C/C++中的日期和时间

    头文件 time.h 函数用途 函数名 得到处理器时间 clock 得到时间差 difftime 设置时间 mktime 得到时间 time 得到以ASCII码表示的时间 asctime 得到字符串表 ...

  2. matlab产生时间数组以月为单位_Matlab中处理日期与时间的函数

    Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示 ...

  3. MySQL中的日期和时间类型

    文章目录 1 MySQL中的日期和时间类型 1 MySQL中的日期和时间类型 日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型.其中,YEAR类型表示年, ...

  4. C++中的日期和时间 time_t与struct tm转换

    C++中的日期和时间 time_t与struct tm转换 通过学习许多C/C++库,可以有很多操作.使用时间的方法.但在这之前需要了解一些 "时间"和"日期" ...

  5. C/C++中的日期和时间

    C/C++中的日期和时间 由 zhanjun 在 周五, 2006-03-24 08:11 提交 C/C++中的日期和时间 作者:日期和时间 出处:日期和时间 更新时间: 2005年09月15日 摘要 ...

  6. SQL Server中的日期和时间:DATEADD()

    我们现在处于SQL Server和Azure SQL数据库中关于日期和时间的长篇系列的主页. 本周我们将讨论日期和时间中我最喜欢的T-SQL函数之一:  DATEADD(). 句法 与类似的功能一样, ...

  7. 更新域内计算机时间,Word2013如何自动更新文档中的日期和时间?如何设置打印前自动更新域...

    在Word2013文档中插入日期和时间,如何实现自动更新,下面小编就给大家介绍一下Word2013中自动更新文档中的日期和时间的方法,而且,使用这个办法还可以插入会自动更新的时间,最后,还给大家分享了 ...

  8. Java中获取日期和时间

    Java中获取日期和时间 1.创建 java.util.Calendar 实例,调用其 get()方法传入不同的参数即可获 得参数所对应的值 import java.util.Calender; // ...

  9. SQL获得当前的日期和时间与DB2 中操作日期和时间

    星期六 2007年08月18日 要使用 SQL 获得当前的日期.时间及时间戳记,请参考适当的 DB2 寄存器: SELECT current date FROM sysibm.sysdummy1 SE ...

最新文章

  1. 跨平台PHP调试器设计及使用方法——使用
  2. 当安卓 Emoji 遇上苹果 Emoji:傻傻分不清楚
  3. 苹果mac电脑修改并快速linux网络配置
  4. Qt+OpenCV打开视频文件并在窗口界面上显示
  5. Java JDK 自带排序(Arrays.sort(数组名))与自行编写的降序
  6. java之重定向与转发
  7. Python编程——函数
  8. 12306微信小程序上线 提供余票查询暂不支持购票
  9. mysql mssql 性能对比_详解mysql分区实验测试--非分区表与分区表的性能对比
  10. sklearn文本聚类分析
  11. Dos Cmd命令整理
  12. 分布式 | 浅谈 dble 引入 ClickHouse 的配置操作
  13. Android 弹幕(一)自定义
  14. Github系列教程一 ————开门
  15. Snapchat面经
  16. BIM建模助手上线一周,有哪些BUG被用户找到?
  17. 天勤python_天勤量化
  18. 软件设计工程——设计流程
  19. html的frame怎么使用方法,HTML frame标签怎么用?frame标签的具体使用实例
  20. 机器学习——线性回归、房价预测案例【正规方案与梯度下降】

热门文章

  1. Unity制作的 安卓和Ios程序如何退出
  2. Python 连接Sql Server数据库 MSSql
  3. Dynamics CRM 开启EmailRouter日志记录
  4. playbook核心元素之 -- 角色role(9)
  5. 微信分销 微信公众号开店 多用户版源码
  6. 如何远程重启和关闭系统
  7. 将简历挂到云服务器网站上记
  8. C#操作注册表全攻略
  9. 亿级用户基于微服务的互联网系统稳定性~
  10. 新款笔记本写代码贼爽,包邮送一台!