本帖最后由 煎饼果子超人 于 2015-3-7 14:04 编辑
因为本来我也是零基础小菜,在做测试题的时候找到几个很好用很方便的视频上没有讲过的语法, 所有想安利给大家,大婶们就当没看见我班门弄斧吧!
第一个是 time 函数,,
这个是我做小明艳遇还是搞基的题时候,我寻思C语言里有没有表示时间,可以直接做时间加减的语法,结果度娘告诉我真有。
表头文件 #include<time.h>
定义函数 time_t mktime(strcut tm * timeptr);
函数说明 mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。
返回值 返回经过的秒数。
我是这么用的- #include <time.h>
- int main()
- {
-
- //让用户输入日期
- time_t t_user;
- struct tm stm_user;
- printf("请输入日期值(按yyyy/mm/dd格式):");
- scanf("%d/%d/%d",&stm_user.tm_year,&stm_user.tm_mon,&stm_user.tm_mday);
- stm_user.tm_year-=1900; /*年份值减去1900,得到tm结构中保存的年份序数*/
- stm_user.tm_mon-=1; /*月份值减去1,得到tm结构中保存的月份序数*/
- stm_user.tm_hour = 0;
- stm_user.tm_min = 0;
- stm_user.tm_sec = 0;
- //把struct tm转成time_t的时间戳
- t_user = mktime(&stm_user); /* 若用户输入的日期时间有误,则函数返回值为-1*/
- if(-1==t_user)
- {
- printf("输入的日期时间格式出错!\n");
- return 0;
- }
- printf("输入的时间戳%ld\n",t_user);
-
- //定义默认的时间 2006年1月1日
- time_t t_default;
- struct tm stm_default;
- stm_default.tm_year = 2006 - 1900;
- stm_default.tm_mon = 0;
- stm_default.tm_mday = 1;
- stm_default.tm_hour = 0;
- stm_default.tm_min = 0;
- stm_default.tm_sec = 0;
- t_default = mktime(&stm_default);
-
- if(stm_user.tm_year < stm_default.tm_year)
- {
- printf("输入的日期不能在2006年1月1日之前!\n");
- return 0;
- }
-
- printf("默认的时间戳%ld\n",t_default);
-
- //计算时间差
- long t_cha = t_user - t_default ;//用户输入的时间戳 减去 默认2006年的时间戳,等于时间差(秒)
- long day = t_cha / 60 /60 / 24;
-
- printf("2006年1月1日 到 %d/%02d/%02d 共%ld秒,%ld天\n",
- stm_user.tm_year+1900,stm_user.tm_mon,stm_user.tm_mday ,t_cha,day);
-
- return 0;
- }
复制代码
这样就不用考虑闰年问题了,但是要考虑夏时令问题
int tm_sec; /* 秒–取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值从1900开始 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
|
|