#include "stdafx.h"
#include <time.h>
#include <string>
#include <iostream>
#define TIMEFORMAT_01 0 // Format1(1) YYYY-MM-DD HH:MM:SS
#define TIMEFORMAT_02 1 // Format2(2) YYYY-MM-DD
#define TIMEFORMAT_03 2 // Format3(3) HH:MM:SS
#define TIMEFORMAT_04 3 // Format4(4) YYYYMMDDHHMMSS
#define TIMEFORMAT_05 4 // Format5(5) YYYYMMDD
#define TIMEFORMAT_06 5 // Format6(6) HHMMSS
// ==
// @Function
// : 把时间结构格式化成指定格式的字符.
// @Param
// : const time_t& tTime : 输入的时间, 单位是秒, 相对于自1970年1月1日0时0分0秒起经过的秒数
// : int nFormat : 输出的字符格式化
// : Format1(1) YYYY-MM-DD HH:MM:SS
// : Format2(2) YYYY-MM-DD
// : Format3(3) HH:MM:SS
// : Format4(4) YYYYMMDDHHMMSS
// : Format5(5) YYYYMMDD
// : Format6(6) HHMMSS
// @Return
// : std::string : 格式化的时间字符
// ====
std::string TimeToString(const time_t& tTime, int nFormat)
{
struct tm tt;
::localtime_s(&tt, &tTime); // 先转换成tm结构
char* pTemp = new char[64];
memset(pTemp, 0, 64);
switch(nFormat)
{
case TIMEFORMAT_01: // YYYY-MM-DD HH:MM:SS
sprintf_s(pTemp, 64, "%04d-%02d-%02d %02d:%02d:%02d",
tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday, tt.tm_hour, tt.tm_min, tt.tm_sec);
break;
case TIMEFORMAT_02: // YYYY-MM-DD
sprintf_s(pTemp, 64, "%04d-%02d-%02d", tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday);
break;
case TIMEFORMAT_03: // HH:MM:SS
sprintf_s(pTemp, 64, "%02d:%02d:%02d", tt.tm_hour, tt.tm_min, tt.tm_sec);
break;
case TIMEFORMAT_04: // YYYYMMDDHHMMSS
sprintf_s(pTemp, 64, "%04d%02d%02d%02d%02d%02d",
tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday, tt.tm_hour, tt.tm_min, tt.tm_sec);
break;
case TIMEFORMAT_05: // YYYYMMDD
sprintf_s(pTemp, 64, "%04d%02d%02d", tt.tm_year + 1900, tt.tm_mon + 1, tt.tm_mday);
break;
case TIMEFORMAT_06: // HHMMSS
sprintf_s(pTemp, 64, "%02d%02d%02d", tt.tm_hour, tt.tm_min, tt.tm_sec);
break;
}
std::string strResult = pTemp;
delete [] pTemp;
return strResult;
}
/
// YYYY-MM-DD HH:MM:SS
time_t TimeFormat_01(const std::string& strTime)
{
if(19 != strTime.size() || '-' != strTime[4] || '-' != strTime[7] ||
' ' != strTime[10] || ':' != strTime[13] || ':' != strTime[16])
{
return 0;
}
char pTemp[20];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
memset(&tt, 0, sizeof(tm));
tt.tm_sec = atoi(pTemp + 17);
pTemp[16] = 0;
tt.tm_min = atoi(pTemp + 14);
pTemp[13] = 0;
tt.tm_hour = atoi(pTemp + 11);
pTemp[10] = 0;
tt.tm_mday = atoi(pTemp + 8);
pTemp[7] = 0;
tt.tm_mon = atoi(pTemp + 5) - 1;
pTemp[4] = 0;
tt.tm_year = atoi(pTemp) - 1900;
return mktime(&tt);
}
// YYYY-MM-DD
time_t TimeFormat_02(const std::string& strTime)
{
if(10 != strTime.size() || '-' != strTime[4] || '-' != strTime[7])
{
return 0;
}
char pTemp[11];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
memset(&tt, 0, sizeof(tm));
tt.tm_mday = atoi(pTemp + 8);
pTemp[7] = 0;
tt.tm_mon = atoi(pTemp + 5) - 1;
pTemp[4] = 0;
tt.tm_year = atoi(pTemp) - 1900;
return mktime(&tt);
}
// HH:MM:SS
time_t TimeFormat_03(const std::string& strTime)
{
if(8 != strTime.size() || ':' != strTime[2] || ':' != strTime[5])
{
return 0;
}
char pTemp[9];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
time_t timeTemp = time(0);
localtime_s(&tt, &timeTemp); // 构造一个虚假日期
tt.tm_sec = atoi(pTemp + 6);
pTemp[5] = 0;
tt.tm_min = atoi(pTemp + 3);
pTemp[2] = 0;
tt.tm_hour = atoi(pTemp);
return mktime(&tt);
}
// YYYYMMDDHHMMSS
time_t TimeFormat_04(const std::string& strTime)
{
if(14 != strTime.size())
{
return 0;
}
char pTemp[15];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
memset(&tt, 0, sizeof(tm));
tt.tm_sec = atoi(pTemp + 12);
pTemp[12] = 0;
tt.tm_min = atoi(pTemp + 10);
pTemp[10] = 0;
tt.tm_hour = atoi(pTemp + 8);
pTemp[8] = 0;
tt.tm_mday = atoi(pTemp + 6);
pTemp[6] = 0;
tt.tm_mon = atoi(pTemp + 4) - 1;
pTemp[4] = 0;
tt.tm_year = atoi(pTemp) - 1900;
return mktime(&tt);
}
// YYYYMMDD
time_t TimeFormat_05(const std::string& strTime)
{
if(8 != strTime.size())
{
return 0;
}
char pTemp[9];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
memset(&tt, 0, sizeof(tm));
tt.tm_mday = atoi(pTemp + 6);
pTemp[6] = 0;
tt.tm_mon = atoi(pTemp + 4) - 1;
pTemp[4] = 0;
tt.tm_year = atoi(pTemp) - 1900;
return mktime(&tt);
}
// HHMMSS
time_t TimeFormat_06(const std::string& strTime)
{
if(6 != strTime.size())
{
return 0;
}
char pTemp[7];
strcpy_s(pTemp, strTime.c_str());
struct tm tt;
time_t timeTemp = time(0);
localtime_s(&tt, &timeTemp); // 构造一个虚假日期
tt.tm_sec = atoi(pTemp + 4);
pTemp[4] = 0;
tt.tm_min = atoi(pTemp + 2);
pTemp[2] = 0;
tt.tm_hour = atoi(pTemp);
return mktime(&tt);
}
// ==
// @Function
// : 把指定格式的字符转换成时间结构
// @Param
// : const std::string& strTime : 格式化的时间字符
// : int nFormat : 输出的字符格式化
// : Format1(1) YYYY-MM-DD HH:MM:SS
// : Format2(2) YYYY-MM-DD
// : Format3(3) HH:MM:SS
// : Format4(4) YYYYMMDDHHMMSS
// : Format5(5) YYYYMMDD
// : Format6(6) HHMMSS
// @Return
// : time_t : 单位是秒; 相对于自1970年1月1日0时0分0秒起经过的秒数
// ====
time_t StringToTime(const std::string& strTime, int nFormat)
{
switch(nFormat)
{
case TIMEFORMAT_01: // YYYY-MM-DD HH:MM:SS
return TimeFormat_01(strTime);
case TIMEFORMAT_02: // YYYY-MM-DD
return TimeFormat_02(strTime);
case TIMEFORMAT_03: // HH:MM:SS
return TimeFormat_03(strTime);
case TIMEFORMAT_04: // YYYYMMDDHHMMSS
return TimeFormat_04(strTime);
case TIMEFORMAT_05: // YYYYMMDD
return TimeFormat_05(strTime);
case TIMEFORMAT_06: // HHMMSS
return TimeFormat_06(strTime);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
// 使用
time_t tTime = ::time(0);
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_01), TIMEFORMAT_01), TIMEFORMAT_01) << std::endl;
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_02), TIMEFORMAT_02), TIMEFORMAT_02) << std::endl;
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_03), TIMEFORMAT_03), TIMEFORMAT_03) << std::endl;
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_04), TIMEFORMAT_04), TIMEFORMAT_04) << std::endl;
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_05), TIMEFORMAT_05), TIMEFORMAT_05) << std::endl;
std::cout << TimeToString(StringToTime(TimeToString(tTime, TIMEFORMAT_06), TIMEFORMAT_06), TIMEFORMAT_06) << std::endl;
return 0;
}
时间与字符串的转换
最新推荐文章于 2023-03-01 15:50:55 发布