C++ time_t与string之间转换的工具类
来源:互联网 发布:js aaencode 编辑:程序博客网 时间:2024/06/06 02:39
之前在做项目的时候遇到了这个需求,当然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; }};
0 0
- C++ time_t与string之间转换的工具类
- time_t 与字符串之间的相互转换
- time_t 与字符串之间的相互转换
- time_t 与字符串之间的相互转换
- SYSTEMTIME 与 time_t 之间的转换
- C++中string 和time_t之间的转换
- 【C#】 char[]与string之间的转换
- Linux C/C++时间字符串与time_t之间的转换方法(转)
- C/C++中time_t、tm、字符串之间的转换
- 不同时间类型之间的转换之SYSTEMTIME 与 time_t
- c++builder中TDateTime与c中time_t的转换
- time_t和struct tm之间的转换
- time_t和SYSTEMTIME之间的相互转换
- time_t和SYSTEMTIME之间的相互转换
- C++string与int之间的相互转换
- String,double,long之间的转换工具类
- Visual C++:CString,char*,int,COleDateTime,CTime,time_t之间的相互转换
- string和byte[]之间的转换 (C#)
- SMTP errors and reply codes
- 浅析sstream库
- IOS下WEB开发细节问题
- redis(一)--概述
- iOS---面试题汇总
- C++ time_t与string之间转换的工具类
- iOS 9官方文档(翻译)
- [Java]剑走偏锋的10条编程技巧
- opencv第七章-直方图与匹配(2)
- Linux伙伴系统(一)--伙伴系统的概述
- ios5的safari浏览器的电话号码识别功能的禁用
- javascript document.write()覆盖原文档的问题
- iOS提交应用至APP Store流程以及AppStore开发者申请流程
- 相册图片选取,图片压缩和图片jpg、png格式的转换