C\C++ windows 绕过strptime
2016-01-15 16:21
204 查看
strptime()函数功能是实现字符串到时间的转换,在linux下可以正常运行,但在windows中却无法找到。Google后有篇微软的博文和StackOverflow都提到了windows中开源的strptime.c文件,但下载下来试后发现缺少很多头文件,如“namespace.h”等,所以这条路走不通。后来依据任务要求发现可以不用strptime:
1.任务目标:给定各个时间要素得到至今为止的秒数;
2.原始strptime构思:
3.绕过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);
相关文章推荐
- 解析C++编程中的bad_cast异常
- C++ Primer 5th Chapter 7 学习笔记
- C++ Primer 5th Chapter 6 学习笔记
- 详解C++中const_cast与reinterpret_cast运算符的用法
- c++面向对象基础
- C++多态实现及原理
- 深入解析C++中的动态类型转换与静态类型转换运算符
- UE4中 指定蓝图GameMode的父类为C++生成的GameMode方法
- C++ Library Installation
- 详解C++编程中表达式的语义与计算顺序
- C++ 获取进程内存占用和CPU利用率等信息
- C语言之括号匹配
- 万恶之源:C语言中的隐式函数声明
- 对 c\c++ char类型的理解
- 值得推荐的C/C++框架和库
- VC++禁止标题栏鼠标双击事件
- C++编译期多态与运行期多态
- 剖析C++中的常量表达式与省略号的相关作用
- C++ Primer plus第6版第10章学习笔记
- C++ Primer plus第6版第9章学习笔记