赞
踩
C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime>头文件,对应的C语言头文件是<time.h>。
序号 | 函数 & 描述 |
---|---|
1 | time_t time(time_t *time); |
2 | char *ctime(const time_t *time); |
3 | struct tm *localtime(const time_t *time); |
4 | clock_t clock(void); |
5 | char *asctime(const struct tm *time); |
6 | struct tm *gmtime(const time_t *time); |
7 | time_t mktime(struct tm *time); |
8 | double difftime(time_t time1, time_t time2); |
9 | size_t strftime(); |
结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:
- struct tm {
- int tm_sec; /* seconds after the minute - [0,59] */
- int tm_min; /* minutes after the hour - [0,59] */
- int tm_hour; /* hours since midnight - [0,23] */
- int tm_mday; /* day of the month - [1,31] */
- int tm_mon; /* months since January - [0,11] */
- int tm_year; /* years since 1900 */
- int tm_wday; /* days since Sunday - [0,6] */
- int tm_yday; /* days since January 1 - [0,365] */
- int tm_isdst; /* daylight savings time flag */
- };
【注意】结构体struct tm的年份是从1900年起至今多少年,月份从0开始的,0表示一月,星期也是从0开始的, 0表示星期日,1表示星期一。
这一节主要是针对时间获取和之间格式转换函数进行说明。
C 库函数 time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为NULL,则返回值也存储在变量 seconds 中。具体是否使用这个入参根据具体后期代码组合方便确定。
- #include <iostream>
- #include <ctime>
-
- int main(int argc, char** argv) {
- time_t nowTime;
- time_t *inputTime = new time_t;
-
- nowTime = time( inputTime );
-
- std::cout << "Return time seconds: " << nowTime << std::endl;
- std::cout << "Input time seconds: " << *inputTime << std::endl;
-
- delete(inputTime);
- return 0;
- }
-
- Return time seconds: 1651747293
- Input time seconds: 1651747293
数据转换这一块有如下这么几种方式进行:
- #include <iostream>
- #include <stdio.h>
- #include <ctime>
-
- #define BST (+1)
- #define CCT (+8)
-
- int main(int argc, char** argv) {
- // 基于当前系统时间
- time_t now = time(NULL);
- char* dt = ctime(&now);
- printf("ctime本地时间%s", dt);
-
- // 把now转换成tm结构形式的GMT时间
- tm *info = gmtime(&now);
- printf("gtime本地时间\n");
- printf("伦敦%2d:%02d\n", (info->tm_hour+BST)%24, info->tm_min);
- printf("中国%2d:%02d\n", (info->tm_hour+CCT)%24, info->tm_min);
-
- // 直接转换成当地时间
- tm *localinfo = localtime(&now);
- printf("localtime本地时间%2d:%02d\n", localinfo->tm_hour, localinfo->tm_min);
-
- // tm时间转换成UTC基准时间字符串
- dt = asctime(info);
- std::cout << "UTC ÈÕÆÚºÍʱ¼ä£º"<< dt << std::endl;
-
- // tm时间转换成特定的描述
- time_t convertNow = 0;
- convertNow = mktime(info);
- printf("Time时间%d,mktime时间%d。\n", now, convertNow) ;
-
- return 0;
- }
ctime本地时间:Fri May 06 09:47:12 2022
gtime当前的世界时钟:
伦敦: 2:47
中国: 9:47
localtime本地时间: 9:47
UTC 日期和时间:Fri May 06 09:47:12 2022
Time 时间:1651801632,mktime 时间1651801632。
- #include <iostream>
- #include <stdio.h>
- #include <ctime>
-
- int main(int argc, char** argv) {
- time_t rawtime;
- struct tm * timeinfo;
- char buffer [80];
-
- time (&rawtime);
- timeinfo = localtime (&rawtime);
-
- strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
- puts (buffer);
-
- return 0;
- }
测试结果:Now it's 09:48AM.
返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,您需要除以 CLOCKS_PER_SEC。在 32 位系统中,CLOCKS_PER_SEC 等于 1000000,该函数大约每 72 分钟会返回相同的值。
- /* clock example: frequency of primes */
- #include <stdio.h> /* printf */
- #include <time.h> /* clock_t, clock, CLOCKS_PER_SEC */
- #include <math.h> /* sqrt */
-
- int frequency_of_primes (int n) {
- int i,j;
- int freq=n-1;
- for (i=2; i<=n; ++i) for (j=sqrt(i);j>1;--j) if (i%j==0) {--freq; break;}
- return freq;
- }
-
- int main ()
- {
- clock_t t;
- int f;
- t = clock();
- printf ("Calculating...\n");
- f = frequency_of_primes (99999);
- printf ("The number of primes lower than 100,000 is: %d\n",f);
- t = clock() - t;
- printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
- return 0;
- }
测试结果:
Calculating...
The number of primes lower than 100,000 is: 9592
It took me 51 clicks (0.051000 seconds).
- /* difftime example */
- #include <stdio.h> /* printf */
- #include <time.h> /* time_t, struct tm, difftime, time, mktime */
-
- int main ()
- {
- time_t now;
- struct tm newyear;
- double seconds;
-
- time(&now); /* get current time; same as: now = time(NULL) */
-
- newyear = *localtime(&now);
-
- newyear.tm_hour = 0; newyear.tm_min = 0; newyear.tm_sec = 0;
- newyear.tm_mon = 0; newyear.tm_mday = 1;
-
- seconds = difftime(now,mktime(&newyear));
-
- printf ("%.f seconds since new year in the current timezone.\n", seconds);
-
- return 0;
- }
输出结果:
3777291 seconds since new year in the current timezone.
实际在代码开发过程中,时间戳的产生和获取的时候会通过一个函数来封装特定格式时间,所以时间开发过程中通过特定的集成函数完成。
- #include <process.h>
- #include <string>
- #include <iostream>
- #include <ctime>
-
- using namespace std;
-
- /*******************************************************************
- * C++ 标准库没有提供所谓的日期类型。
- * C++ 继承了 C 语言用于日期和时间操作的结构和函数。
- * 为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime> 头文件。
-
- *******************************************************************/
- std::string GetSystemTime()
- {
- time_t tt;
- struct tm *t;
- tt = time(0);
- t = localtime(&tt);
- char char_time[50] = {};
- sprintf(char_time, " %04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900,
- t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
- std::string str_system_time = static_cast<std::string>(char_time);
- return str_system_time;
- }
-
- int main(void)
- {
- std::string system_time = GetSystemTime();
- std::cout << "current_system_time :" << system_time;
- system("pause");
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。