自己做的网站 怎么放大文件,深圳seo网站推广报价,档案馆网站建设现状,在线设计免费C日期 时间
一、C日期 时间
C 标准库没有提供所谓的日期类型。C 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构#xff0c;需要在 C 程序中引用 头文件。
有四个与时间相关的类型#xff1a;clock_t、time_t、size_t 和 …C日期 时间
一、C日期 时间
C 标准库没有提供所谓的日期类型。C 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构需要在 C 程序中引用 头文件。
有四个与时间相关的类型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 中关于日期和时间的重要函数
2.1 time_t time(time_t *time)
C 库函数 - time() 描述 C 库函数 time_t time(time_t *seconds) 返回自纪元 Epoch1970-01-01 00:00:00 UTC起经过的时间以秒为单位。如果 seconds 不为空则返回值也存储在变量 seconds 中。
声明 下面是 time() 函数的声明。 time_t time(time_t *seconds) 参数 seconds – 这是指向类型为 time_t 的对象的指针用来存储 seconds 的值。 返回值 以 time_t 对象返回当前日历时间
#include stdio.h
#include time.hint main ()
{time_t seconds;seconds time(NULL);printf(自 1970-01-01 起的小时数 %ld\n, seconds/3600);return(0);
}自 1970-01-01 起的小时数 373711 2.2 char *ctime(const time_t *time)
描述 C 库函数 char *ctime(const time_t *timer) 返回一个表示当地时间的字符串当地时间是基于参数 timer。
返回的字符串格式如下 Www Mmm dd hh:mm:ss yyyy 其中Www 表示星期几Mmm 是以字母表示的月份dd 表示一月中的第几天hh:mm:ss 表示时间yyyy 表示年份。
声明 下面是 ctime() 函数的声明。 char *ctime(const time_t *timer) 参数 timer – 这是指向 time_t 对象的指针该对象包含了一个日历时间。 返回值 该函数返回一个 C 字符串该字符串包含了可读格式的日期和时间信息
#include stdio.h
#include time.hint main ()
{time_t curtime;time(curtime);printf(当前时间 %s, ctime(curtime));return(0);
}当前时间 Tue Mar 07 22:56:08 2023 2.3 struct tm *localtime(const time_t *time)
描述 C 库函数 struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构并用本地时区表示。
声明 下面是 localtime() 函数的声明。 struct tm *localtime(const time_t *timer) 参数 timer – 这是指向表示日历时间的 time_t 值的指针。 返回值 该函数返回指向 tm 结构的指针该结构带有被填充的时间信息。下面是 tm 结构的细节
struct tm {int tm_sec; /* 秒范围从 0 到 59 */int tm_min; /* 分范围从 0 到 59 */int tm_hour; /* 小时范围从 0 到 23 */int tm_mday; /* 一月中的第几天范围从 1 到 31 */int tm_mon; /* 月份范围从 0 到 11 */int tm_year; /* 自 1900 起的年数 */int tm_wday; /* 一周中的第几天范围从 0 到 6 */int tm_yday; /* 一年中的第几天范围从 0 到 365 */int tm_isdst; /* 夏令时 */
};#include stdio.h
#include time.hint main ()
{time_t rawtime;struct tm *info;char buffer[80];time( rawtime );info localtime( rawtime );printf(当前的本地时间和日期%s, asctime(info));return(0);
}当前的本地时间和日期Tue Mar 07 22:57:21 2023 2.4 clock_t clock(void)
描述 C 库函数 clock_t clock(void) 返回程序执行起一般为程序的开头处理器时钟所使用的时间。为了获取 CPU 所使用的秒数您需要除以 CLOCKS_PER_SEC。
在 32 位系统中CLOCKS_PER_SEC 等于 1000000该函数大约每 72 分钟会返回相同的值。
声明 下面是 clock() 函数的声明。 clock_t clock(void) 参数 NA 返回值 该函数返回自程序启动起处理器时钟所使用的时间。如果失败则返回 -1 值
#include time.h
#include stdio.hint main()
{clock_t start_t, end_t;double total_t;int i;start_t clock();printf(程序启动start_t %ld\n, start_t);printf(开始一个大循环start_t %ld\n, start_t);for(i0; i 10000000; i){}end_t clock();printf(大循环结束end_t %ld\n, end_t);total_t (double)(end_t - start_t) / CLOCKS_PER_SEC;printf(CPU 占用的总时间%f\n, total_t );printf(程序退出...\n);return(0);
}程序启动start_t 0 开始一个大循环start_t 0 大循环结束end_t 10 CPU 占用的总时间0.010000 程序退出… 2.5 char * asctime ( const struct tm * time )
描述 C 库函数 char *asctime(const struct tm *timeptr) 返回一个指向字符串的指针它代表了结构 struct timeptr 的日期和时间。
声明 下面是 asctime() 函数的声明。 char *asctime(const struct tm *timeptr) 参数 timeptr 是指向 tm 结构的指针包含了分解为如下各部分的日历时间 struct tm { int tm_sec; /* 秒范围从 0 到 59 / int tm_min; / 分范围从 0 到 59 / int tm_hour; / 小时范围从 0 到 23 / int tm_mday; / 一月中的第几天范围从 1 到 31 / int tm_mon; / 月份范围从 0 到 11 / int tm_year; / 自 1900 起的年数 / int tm_wday; / 一周中的第几天范围从 0 到 6 / int tm_yday; / 一年中的第几天范围从 0 到 365 / int tm_isdst; / 夏令时 */ }; 返回值 该函数返回一个 C 字符串包含了可读格式的日期和时间信息 Www Mmm dd hh:mm:ss yyyy其中Www 表示星期几Mmm 是以字母表示的月份dd 表示一月中的第几天hh:mm:ss 表示时间yyyy 表示年份
#include stdio.h
#include string.h
#include time.hint main()
{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));return(0);
}Sat Mar 25 06:10:10 1989 2.6 struct tm *gmtime(const time_t *time)
描述 C 库函数 struct tm *gmtime(const time_t *timer) 使用 timer 的值来填充 tm 结构并用协调世界时UTC也被称为格林尼治标准时间GMT表示。
声明 下面是 gmtime() 函数的声明。 struct tm *gmtime(const time_t *timer) 参数 timeptr – 这是指向表示日历时间的 time_t 值的指针。 返回值 该函数返回指向 tm 结构的指针该结构带有被填充的时间信息。下面是 timeptr 结构的细节
实例 struct tm { int tm_sec; /* 秒范围从 0 到 59 / int tm_min; / 分范围从 0 到 59 / int tm_hour; / 小时范围从 0 到 23 / int tm_mday; / 一月中的第几天范围从 1 到 31 / int tm_mon; / 月份范围从 0 到 11 / int tm_year; / 自 1900 起的年数 / int tm_wday; / 一周中的第几天范围从 0 到 6 / int tm_yday; / 一年中的第几天范围从 0 到 365 / int tm_isdst; / 夏令时 */ }; #include stdio.h
#include time.h#define BST (1)
#define CCT (8)int main ()
{time_t rawtime;struct tm *info;time(rawtime);/* 获取 GMT 时间 */info gmtime(rawtime );printf(当前的世界时钟\n);printf(伦敦%2d:%02d\n, (info-tm_hourBST)%24, info-tm_min);printf(中国%2d:%02d\n, (info-tm_hourCCT)%24, info-tm_min);return(0);
}当前的世界时钟 伦敦16:01 中国23:01 2.7 time_t mktime(struct tm *time)
描述 C 库函数 time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数发生错误时返回-1。
声明 下面是 mktime() 函数的声明。 time_t mktime(struct tm *timeptr) 参数 timeptr – 这是指向表示日历时间的 time_t 值的指针该日历时间被分解为以下各部分。下面是 timeptr 结构的细节 struct tm { int tm_sec; /* 秒范围从 0 到 59 / int tm_min; / 分范围从 0 到 59 / int tm_hour; / 小时范围从 0 到 23 / int tm_mday; / 一月中的第几天范围从 1 到 31 / int tm_mon; / 月份范围从 0 到 11 / int tm_year; / 自 1900 起的年数 / int tm_wday; / 一周中的第几天范围从 0 到 6 / int tm_yday; / 一年中的第几天范围从 0 到 365 / int tm_isdst; / 夏令时 */ }; 返回值 该函数返回自 1970 年 1 月 1 日以来持续时间的秒数。如果发生错误则返回 -1 值。
#include stdio.h
#include time.hint main () {int ret;struct tm info;char buffer[80];info.tm_year 2021 - 1900;info.tm_mon 7 - 1;info.tm_mday 4;info.tm_hour 0;info.tm_min 0;info.tm_sec 1;info.tm_isdst -1;ret mktime(info);if( ret -1 ) {printf(Error: unable to make time using mktime\n);} else {strftime(buffer, sizeof(buffer), %c, info );printf(buffer);}return(0);
}07/04/21 00:00:01 /* 输入日期判断是周几 */
#include stdio.h /* printf, scanf */
#include time.h /* time_t, struct tm, time, mktime */int main ()
{time_t rawtime;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 ( rawtime );timeinfo localtime ( rawtime );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]);return 0;
}年: 2022 月: 5 日: 21 那一天是周六 2.8 double difftime ( time_t time2, time_t time1 )
描述 C 库函数 double difftime(time_t time1, time_t time2) 返回 time1 和 time2 之间相差的秒数 (time1 - time2)。这两个时间是在日历时间中指定的表示了自纪元 Epoch协调世界时 UTC1970-01-01 00:00:00起经过的时间。
声明 下面是 difftime() 函数的声明。
double difftime(time_t time1, time_t time2) 参数 time1 – 这是表示结束时间的 time_t 对象。 time2 – 这是表示开始时间的 time_t 对象。 返回值 该函数返回以双精度浮点型 double 值表示的两个时间之间相差的秒数 (time1 - time2)
#include stdio.h
#include time.h
#ifdef _WIN32
#include Windows.h
#else
#include unistd.h
#endifint main ()
{time_t start_t, end_t;double diff_t;printf(程序启动...\n);time(start_t);printf(休眠 5 秒...\n);sleep(5);time(end_t);diff_t difftime(end_t, start_t);printf(执行时间 %f\n, diff_t);printf(程序退出...\n);return(0);
}程序启动… 休眠 5 秒… 执行时间 5.000000 程序退出… 2.9 size_t strftime()
描述 C 库函数 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) 根据 format 中定义的格式化规则格式化结构 timeptr 表示的时间并把它存储在 str 中。
声明 下面是 strftime() 函数的声明。 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 */int tm_min; /* 分范围从 0 到 59 */int tm_hour; /* 小时范围从 0 到 23 */int tm_mday; /* 一月中的第几天范围从 1 到 31 */int tm_mon; /* 月份范围从 0 到 11 */int tm_year; /* 自 1900 起的年数 */int tm_wday; /* 一周中的第几天范围从 0 到 6 */int tm_yday; /* 一年中的第几天范围从 0 到 365 */int tm_isdst; /* 夏令时 */
};返回值 如果产生的 C 字符串小于 size 个字符包括空结束字符则会返回复制到 str 中的字符总数不包括空结束字符否则返回零
#include stdio.h
#include time.hint main ()
{time_t rawtime;struct tm *info;char buffer[80];time( rawtime );info localtime( rawtime );strftime(buffer, 80, %Y-%m-%d %H:%M:%S, info);printf(格式化的日期 时间 : |%s|\n, buffer );return(0);
}三、当前日期和时间
下面的实例获取当前系统的日期和时间包括本地时间和协调世界时UTC
#include iostream
#include ctimeusing namespace std;int main( )
{// 基于当前系统的当前日期/时间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;
}本地日期和时间Tue Mar 07 23:06:55 2023 UTC 日期和时间Tue Mar 07 15:06:55 2023 四、使用结构 tm 格式化时间
tm 结构在 C/C 中处理日期和时间相关的操作时显得尤为重要。tm 结构以 C 结构的形式保存日期和时间。大多数与时间相关的函数都使用了 tm 结构。下面的实例使用了 tm 结构和各种与日期和时间相关的函数
#include iostream
#include ctimeusing namespace std;int main( )
{// 基于当前系统的当前日期/时间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;
}1970 到目前经过秒数:1678201681 年: 2023 月: 3 日: 7 时间: 23:8:1 菜鸟教程学习记录