电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

linux下的时间转换函数

15页
  • 卖家[上传人]:re****.1
  • 文档编号:489606148
  • 上传时间:2023-07-03
  • 文档格式:DOC
  • 文档大小:49.50KB
  • / 15 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、linux下的时间函数我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年、月、日、时、分、秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数。linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。structtimevallongtv_sec;/*秒*/longtv_usec;/*微秒*/;而直接存储年月日的是一个结构:structtminttm_sec;/*秒,正常范围0-59, 但允许至61*/inttm_min;/*分钟,0-59*/inttm_hour;/*小时, 0-23*/inttm_mday;/*日,即一个月中的第几天,1-31*/inttm_mon;/*月, 从一月算起,0-11*/inttm_year;/*年, 从1900至今已经多少年*/inttm_wday;/*星期,一周中的第几天, 从星期日算起,0-6*/inttm_yday;/*

      2、从今年1月1日到目前的天数,范围0-365*/inttm_isdst;/*日光节约时间的旗标*/;需要特别注意的是,年份是从1900年起至今多少年,而不是直接存储如2008年,月份从0开始的,0表示一月,星期也是从0开始的, 0表示星期日,1表示星期一。下面介绍一下我们常用的时间函数:#includechar*asctime(conststructtm*timeptr);将结构中的信息转换为真实世界的时间,以字符串的形式显示char*ctime(consttime_t*timep);将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样doubledifftime(time_ttime1,time_ttime2);返回两个时间相差的秒数intgettimeofday(structtimeval*tv,structtimezone*tz);返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用structtm*gmtime(consttime_t*timep);将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struc

      3、ttm结构指针stucttm*localtime(consttime_t*timep);和gmtime类似,但是它是经过时区转换的时间。time_tmktime(structtm*timeptr);将structtm结构的时间转换为从1970年至今的秒数time_ttime(time_t*t);取得从1970年1月1日至今的秒数。上面是简单的介绍,下面通过实战来看看这些函数的用法:下载:gettime1.c1. /*gettime1.c*/2. #include3.4. intmain()5. 6. time_ttimep;7.8. time(&timep);/*获取time_t类型的当前时间*/9. /*用gmtime将time_t类型的时间转换为struct tm类型的时间按,10. 然后再用asctime转换为我们常见的格式 Fri Jan 11 17:25:24 200811. */12. printf(%s,asctime(gmtime(&timep);13. return0;14. 编译并运行:$gcc -o gettime1 gettime1.c$./gettime1Fr

      4、i Jan 11 17:04:08 2008下面是直接把time_t类型的转换为我们常见的格式:下载:gettime2.c1. /* gettime2.c*/2. #include3.4. intmain()5. 6. time_ttimep;7.8. time(&timep);/*获取time_t类型当前时间*/9. /*转换为常见的字符串:Fri Jan 11 17:04:08 2008*/10. printf(%s,ctime(&timep);11. return0;12. 编译并运行:$gcc -o gettime2 gettime2.c$./gettime2Sat Jan 12 01:25:29 2008我看了一本书上面说的这两个例子如果先后执行的话,两个的结果除了秒上有差别之外(执行程序需要时间),应该是一样的,可是我这里执行却发现差了很长时间按,一个是周五,一个是周六,后来我用 date 命令执行了一遍$date六 1月 12 01:25:19 CST 2008我发现date和gettime2比较一致, 我估计可能gettime1并没有经过时区的转换,它们是有差别的。下载

      5、:gettime3.c1. /*gettime3.c */2. #include3.4. intmain()5. 6. char*wday=Sun,Mon,Tue,Wed,Thu,Fri,Sat;7. time_ttimep;8. structtm*p;9.10. time(&timep);/*获得time_t结构的时间,UTC时间*/11. p=gmtime(&timep);/*转换为struct tm结构的UTC时间*/12. printf(%d/%d/%d,1900+p-tm_year,1+p-tm_mon,p-tm_mday);13. printf(%s %d:%d:%d/n,wdayp-tm_wday,p-tm_hour,14. p-tm_min,p-tm_sec);15. return0;16. 编译并运行:$gcc -o gettime3 gettime3.c$./gettime32008/1/11 Fri 17:42:54从这个时间结果上来看,它和gettime1保持一致。下载:gettime4.c1. /*gettime4.c*/2. #include3.4. int

      6、main()5. 6. char*wday=Sun,Mon,Tue,Wed,Thu,Fri,Sat;7. time_ttimep;8. structtm*p;9.10. time(&timep);/*获得time_t结构的时间,UTC时间*/11. p=localtime(&timep);/*转换为struct tm结构的当地时间*/12. printf(%d/%d/%d,1900+p-tm_year,1+p-tm_mon,p-tm_mday);13. printf(%s %d:%d:%d/n,wdayp-tm_wday,p-tm_hour,p-tm_min,p-tm_sec);14. return0;15. 编译并运行:$gcc -o gettime4 gettime4.c$./gettime42008/1/12 Sat 1:49:29从上面的结果我们可以这样说:time, gmtime, asctime 所表示的时间都是UTC时间,只是数据类型不一样,而localtime, ctime 所表示的时间都是经过时区转换后的时间,它和你用系统命令date所表示的CST时间应该保持一致。下

      7、载:gettime5.c1. /*gettime5.c*/2. #include3.4. intmain()5. 6. time_ttimep;7. structtm*p;8.9. time(&timep);/*当前time_t类型UTC时间*/10. printf(time():%d/n,timep);11. p=localtime(&timep);/*转换为本地的tm结构的时间按*/12. timep=mktime(p);/*重新转换为time_t类型的UTC时间,这里有一个时区的转换*/13. printf(time()-localtime()-mktime(): %d/n,timep);14. return0;15. 编译并运行:$gcc -o gettime5 gettime5.c$./gettime5time():1200074913time()-localtime()-mktime(): 1200074913这里面把UTC时间按转换为本地时间,然后再把本地时间转换为UTC时间,它们转换的结果保持一致。下载:gettime6.c1. /*gettime6.c */2. #i

      8、nclude3.4. intmain()5. 6. time_ttimep;7. structtm*p;8.9. time(&timep);/*得到time_t类型的UTC时间*/10. printf(time():%d/n,timep);11. p=gmtime(&timep);/*得到tm结构的UTC时间*/12. timep=mktime(p);/*转换,这里会有时区的转换*/13. printf(time()-gmtime()-mktime(): %d/n,timep);14. return0;15. 编译并运行:$gcc -o gettime6 gettime6.c$./gettime6time():1200075192time()-gmtime()-mktime(): 1200046392从这里面我们可以看出,转换后时间不一致了,计算一下,整整差了8个小时( (1200075192-1200046392)/3600 = 8 ),说明mktime会把本地时间转换为UTC时间,这里面本来就是UTC时间,于是再弄个时区转换,结果差了8个小时,用的时候应该注意。函数分类:1. 设置时间: settimeofday, tzset2. 获取时间: time, ftime, gettimeofday3. 时间格式转换: mktime, strftime; gmtime, localtime; asctime, ctime4. 其他: clock, difftimeasctime: 将时间和日期以字符串格式表示头文件: time.h函数定义: char *asctime(const struct tm *timeptr);说明: asctime()将函数timeptr所指的tm结构中的信息转换成现实世界所使用的时间日期表示方法, 然后将结果以

      《linux下的时间转换函数》由会员re****.1分享,可在线阅读,更多相关《linux下的时间转换函数》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.