您的位置:首页 > 编程语言 > C语言/C++

C\C++ windows 绕过strptime

2016-01-15 16:21 204 查看
strptime()函数功能是实现字符串到时间的转换,在linux下可以正常运行,但在windows中却无法找到。Google后有篇微软的博文和StackOverflow都提到了windows中开源的strptime.c文件,但下载下来试后发现缺少很多头文件,如“namespace.h”等,所以这条路走不通。后来依据任务要求发现可以不用strptime:

1.任务目标:给定各个时间要素得到至今为止的秒数;

2.原始strptime构思:

struct tm tt0;
//时间是2015年第234天16时0分0秒
sprintf(d_time, "%d-%d %d:%d:%d", 2015, 234, 16, 0, 0);//先将时间要素转成字符串
strptime(d_time, "%Y-%j %H:%M:%S", &tt0);//再将字符串d_time转成tm结构的对象
time_t t0 = mktime(&tt0);//最后通过调用mktime函数得到time_t结构的秒数


3.绕过strptime实现:

struct tm tt0={0};//!!!特别注意,tt0最好赋初值,否则某些量容易出错
//直接赋值tt0结构体,以下通过故意赋错的值实现天数的赋值
//理论上如果赋天数应该是tt0.yday=234就行,但查阅文档后发现该值一般忽略,是由年月日确定后自动算出
//因此网上采取这种方法,将月份赋值为0表示January,当天数tm_mday大于31的时候会自动调整。
//[原文出处](http://stackoverflow.com/questions/9575131/why-is-mktime-changing-the-year-day-of-my-tm-struct)
tt0.tm_sec = 0;
tt0.tm_min = 0;
tt0.tm_hour = 16;
tt0.tm_mday = 234;
tt0.tm_mon = 0;
tt0.tm_year = 2015-1900;//!!!特别注意:必须减1900,否则mktime报错
time_t t0 = mktime(&tt0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: