C++ time_t与string之间转换的工具类
2015-10-19 10:10
393 查看
之前在做项目的时候遇到了这个需求,当然baidu到了这个工具类一直忘了分享,现在补上分享,但是出处忘了,如果有博友知道出处,我到时候再补充上。
工具类支持两种格式 一种精确到日,一种精确到秒,如果有其他需求 可以自己修改方法的实现。
工具类支持两种格式 一种精确到日,一种精确到秒,如果有其他需求 可以自己修改方法的实现。
#include <string> #include <sys/time.h> /* string to time_t 时间格式 2009-3-24 */ class Convert_between_string_time_t { public : static int API_StringToTime(const std::string &strDateStr,time_t &timeData) { char *pBeginPos = (char*) strDateStr.c_str(); char *pPos = strstr(pBeginPos,"-"); if(pPos == NULL) { return -1; } int iYear = atoi(pBeginPos); int iMonth = atoi(pPos + 1); pPos = strstr(pPos + 1,"-"); if(pPos == NULL) { return -1; } int iDay = atoi(pPos + 1); struct tm sourcedate; memset((void*)&sourcedate,0,sizeof(sourcedate)); sourcedate.tm_mday = iDay; sourcedate.tm_mon = iMonth - 1; sourcedate.tm_year = iYear - 1900; timeData = mktime(&sourcedate); return 0; }; /* time_t to string */ static int API_TimeToString(std::string &strDateStr,const time_t &timeData) { char chTmp[15]; memset(chTmp,0,sizeof(chTmp)); struct tm *p; p = localtime(&timeData); p->tm_year = p->tm_year + 1900; p->tm_mon = p->tm_mon + 1; snprintf(chTmp,sizeof(chTmp),"%04d-%02d-%02d", p->tm_year, p->tm_mon, p->tm_mday); strDateStr = chTmp; return 0; }; // struct tm // { // int tm_sec; // int tm_min; // int tm_hour; // int tm_mday; // int tm_mon; // int tm_year; // int tm_wday; // int tm_yday; // int tm_isdst; // }; //int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒 //int tm_min 代表目前分数,范围0-59 //int tm_hour 从午夜算起的时数,范围为0-23 //int tm_mday 目前月份的日数,范围01-31 //int tm_mon 代表目前月份,从一月算起,范围从0-11 //int tm_year 从1900 年算起至今的年数 //int tm_wday 一星期的日数,从星期一算起,范围为0-6 //int tm_yday 从今年1月1日算起至今的天数,范围为0-365 //int tm_isdst 日光节约时间的旗标 /* string to time_t 时间格式 2009-3-24 0:00:08 或 2009-3-24 */ static int API_StringToTimeEX(const std::string &strDateStr,time_t &timeData) { char *pBeginPos = (char*) strDateStr.c_str(); char *pPos = strstr(pBeginPos,"-"); if(pPos == NULL) { printf("strDateStr[%s] err \n", strDateStr.c_str()); return -1; } int iYear = atoi(pBeginPos); int iMonth = atoi(pPos + 1); pPos = strstr(pPos + 1,"-"); if(pPos == NULL) { printf("strDateStr[%s] err \n", strDateStr.c_str()); return -1; } int iDay = atoi(pPos + 1); int iHour=0; int iMin=0; int iSec=0; pPos = strstr(pPos + 1," "); //为了兼容有些没精确到时分秒的 if(pPos != NULL) { iHour=atoi(pPos + 1); pPos = strstr(pPos + 1,":"); if(pPos != NULL) { iMin=atoi(pPos + 1); pPos = strstr(pPos + 1,":"); if(pPos != NULL) { iSec=atoi(pPos + 1); } } } struct tm sourcedate; memset((void*)&sourcedate,0,sizeof(sourcedate)); sourcedate.tm_sec = iSec; sourcedate.tm_min = iMin; sourcedate.tm_hour = iHour; sourcedate.tm_mday = iDay; sourcedate.tm_mon = iMonth - 1; sourcedate.tm_year = iYear - 1900; timeData = mktime(&sourcedate); return 0; } /* time_t to string 时间格式 2009-3-24 0:00:08 */ static int API_TimeToStringEX(std::string &strDateStr,const time_t &timeData) { char chTmp[100]; memset(chTmp,0,sizeof(chTmp)); struct tm *p; p = localtime(&timeData); p->tm_year = p->tm_year + 1900; p->tm_mon = p->tm_mon + 1; snprintf(chTmp,sizeof(chTmp),"%04d-%02d-%02d %02d:%02d:%02d", p->tm_year, p->tm_mon, p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec); strDateStr = chTmp; return 0; } };
相关文章推荐
- C语言学习笔记
- Leetcode Subsets II
- C++知识点整理——持续更新
- Effective modern C++ 条款 40:注意不同线程句柄的析构函数的行为
- 一个C++ 发送邮件的类
- Effective modern C++ 条款 39:让std::thread在所有路径上不可join(Make std::threads unjoinable on all paths)
- typedef struct 小结
- C++使用localtime函数需要注意的地方
- Beautiful Array
- C++习题三12题
- C++习题三10、11题
- 初学者C++学习笔记 零碎小知识点
- Leetcode Subsets
- 关键字volatile在c语言下的理解
- windows下使用vim(gVim)和gcc(MinGW):C/C++/Fortran/ObjC/Ada Compiler
- C语言学习—动态内存分配
- C++ STL学习之stack
- C++ 动态库&静态库创建和使用
- C语言面试宝典
- 链表