C\C++ windows 绕过strptime

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);
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值