A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 煎饼果子超人 于 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时间所经过的秒数。
返回值  返回经过的秒数。

我是这么用的
  1. #include <time.h>
  2. int main()
  3. {
  4.    
  5.     //让用户输入日期
  6.     time_t t_user;
  7.     struct tm stm_user;
  8.     printf("请输入日期值(按yyyy/mm/dd格式):");
  9.     scanf("%d/%d/%d",&stm_user.tm_year,&stm_user.tm_mon,&stm_user.tm_mday);
  10.     stm_user.tm_year-=1900; /*年份值减去1900,得到tm结构中保存的年份序数*/
  11.     stm_user.tm_mon-=1;    /*月份值减去1,得到tm结构中保存的月份序数*/
  12.     stm_user.tm_hour = 0;
  13.     stm_user.tm_min = 0;
  14.     stm_user.tm_sec = 0;
  15.     //把struct tm转成time_t的时间戳
  16.     t_user = mktime(&stm_user);  /* 若用户输入的日期时间有误,则函数返回值为-1*/
  17.     if(-1==t_user)
  18.     {
  19.         printf("输入的日期时间格式出错!\n");
  20.         return 0;
  21.     }
  22.     printf("输入的时间戳%ld\n",t_user);
  23.    
  24.     //定义默认的时间 2006年1月1日
  25.     time_t t_default;
  26.     struct tm stm_default;
  27.     stm_default.tm_year = 2006 - 1900;
  28.     stm_default.tm_mon = 0;
  29.     stm_default.tm_mday = 1;
  30.     stm_default.tm_hour = 0;
  31.     stm_default.tm_min = 0;
  32.     stm_default.tm_sec = 0;
  33.     t_default = mktime(&stm_default);
  34.    
  35.     if(stm_user.tm_year < stm_default.tm_year)
  36.     {
  37.         printf("输入的日期不能在2006年1月1日之前!\n");
  38.         return 0;
  39.     }
  40.    
  41.     printf("默认的时间戳%ld\n",t_default);
  42.    
  43.     //计算时间差
  44.     long t_cha = t_user - t_default ;//用户输入的时间戳 减去 默认2006年的时间戳,等于时间差(秒)
  45.     long day = t_cha / 60 /60 / 24;
  46.    
  47.     printf("2006年1月1日 到 %d/%02d/%02d 共%ld秒,%ld天\n",
  48.            stm_user.tm_year+1900,stm_user.tm_mon,stm_user.tm_mday ,t_cha,day);
  49.    
  50.     return 0;
  51. }
复制代码

这样就不用考虑闰年问题了,但是要考虑夏时令问题
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有关)*/



1 个回复

正序浏览
先马后编~~~~~~华丽丽的分割线







回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马