时间与字符串的转换


#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值