C\C++ windows 绕过strptime

来源:互联网 发布:mac server如何使用 编辑:程序博客网 时间:2024/06/15 12:45

strptime()函数功能是实现字符串到时间的转换,在linux下可以正常运行,但在windows中却无法找到。Google后有篇微软的博文和StackOverflow都提到了windows中开源的strptime.c文件,但下载下来试后发现缺少很多头文件,如“namespace.h”等,所以这条路走不通。后来依据任务要求发现可以不用strptime:
1.任务目标:给定各个时间要素得到至今为止的秒数;
2.原始strptime构思:

struct tm tt0;//时间是2015年第2341600sprintf(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);
1 0