时间格式数据及字符串的简单处理

#include "stdafx.h"
/// 判断文件格式
const unsigned int GetFileFormat(TCHAR* sFileName)
{
	unsigned int iRet = E_FileERR;

	/// 0、判断文件名是否有效
	//if (sFileName.IsEmpty() || 4 > sFileName.GetLength())
	//	return iRet;
	int iLenth = WideCharToMultiByte(CP_ACP, 0, sFileName, -1, NULL, 0, NULL, NULL);
	if (iLenth == 0 || 4 > iLenth)
		return iRet;

	string strFileName = C22<255>(sFileName);
	size_t iLen = strFileName.length();
	int iPos = strFileName.find_last_of(‘.‘);
	if (iPos >= 0 && iPos < iLen)
	{
		string strSuff(strFileName.substr(iPos, iLen - iPos));
		/// 转变为小写,方便比较扩展名
		transform(strSuff.begin(), strSuff.end(), strSuff.begin(), tolower);

		if (!(strSuff.compare(".csv")))
		{
			iRet = E_FileCSV;
		}
		else if (!(strSuff.compare(".txt")))
		{
			iRet = E_FileTXT;
		}
		else if (!(strSuff.compare(".xls")))
		{
			iRet = E_FileXLS;
		}
		else if (!(strSuff.compare(".xlsx")))
		{
			iRet = E_FileXLSX;
		}
		else if (!(strSuff.compare(".dbf")))
		{
			iRet = E_FileDBF;
		}

	}

	return iRet;
}

const SYSTEMTIME Time_tToSystemTime(time_t t)
{
	tm temptm;
	localtime_s(&temptm, &t);
	SYSTEMTIME st = { 1900 + temptm.tm_year,
		1 + temptm.tm_mon,
		temptm.tm_wday,
		temptm.tm_mday,
		temptm.tm_hour,
		temptm.tm_min,
		temptm.tm_sec,
		0 };
	return st;
}

const time_t SystemTimeToTime_t(const SYSTEMTIME& st)
{
	struct tm gm = { st.wSecond, st.wMinute, st.wHour, st.wDay, st.wMonth - 1, st.wYear - 1900, st.wDayOfWeek, 0, 0 };
	return mktime(&gm);
}

const SYSTEMTIME GetTimeFromString(std::string szTime, std::string szGap, bool bOneDayTime)
{
	SYSTEMTIME targetTime = { 0 };
	int gapSize = szTime.find(szGap);
	int pos0 = szTime.find_first_of(szGap);
	int pos1 = szTime.find_last_of(szGap);
	if (pos0 < 0 || pos1 < 0 || pos0 == pos1)
	{
		return targetTime;
	}
	string szHead(szTime.c_str(), pos0);
	string szMiddle(szTime.c_str() + pos0 + 1, pos1 - pos0 - 1);
	string szTail(szTime.c_str() + pos1 + 1, szTime.length() - pos1 - 1);

	if (bOneDayTime) //HH:mm:ss
	{
		targetTime = { 0, 0, 0, 0, atoi(szHead.c_str()), atoi(szMiddle.c_str()), atoi(szTail.c_str()), 0 };
	}
	else			//YYYY:MM:DD
	{
		targetTime = { atoi(szHead.c_str()), atoi(szMiddle.c_str()), 0, atoi(szTail.c_str()), 0, 0, 0, 0 };
	}
	return targetTime;
}

//获取指定月份天数(//改为获取当月最后一个工作日)
const unsigned int GetDaysInMonth(const unsigned int year, const unsigned int month)
{
	unsigned int tmpDay;
	const int day[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	if (month == 2)
	{
		tmpDay = ((0 == year % 4) && (0 != year % 100) || (0 == year % 400)) ? 29 : 28;
	}
	else if (month > 12)
	{
		tmpDay = 30;
	}
	else
	{
		tmpDay = day[month - 1];
	}
	return tmpDay;
}

//获取当前时间点当月最后一个工作日
const SYSTEMTIME GetCurMonthLastWorkDay(SYSTEMTIME curTime)
{
	unsigned int lastDay = GetDaysInMonth(curTime.wYear, curTime.wMonth);
	time_t lastDaySecond = SystemTimeToTime_t(curTime) + (lastDay - curTime.wDay) * (24 * 3600);
	SYSTEMTIME lastDayTime = Time_tToSystemTime(lastDaySecond);
	return GetLastWorkDay(lastDayTime);
}

//获取当前时间点最后一个工作日的日期
const SYSTEMTIME GetLastWorkDay(const SYSTEMTIME& st)
{
	int endSeconds = 0;
	if (0 == st.wDayOfWeek % 6)
	{
		time_t selTime_t = SystemTimeToTime_t(st);
		//当前时间点为周末
		if (st.wDayOfWeek == 6)
		{
			endSeconds = (24 * 3600) * 1;
		}
		else
		{
			endSeconds = (24 * 3600) * 2;
		}

		return  Time_tToSystemTime(selTime_t - endSeconds);
	}
	else
	{
		//当前时间点为工作日
		return st;
	}
}

//获取当前时间点包含N个工作日的起始日期(默认是5个工作日)
const SYSTEMTIME GetFirstWorkDay(const SYSTEMTIME& st, const unsigned int nDaysBefor)
{
	int startSecond = 0;
	int endSeconds = 0;
	time_t selTime_t = SystemTimeToTime_t(st);
	//获取日期前推
	if (st.wDayOfWeek % 6 == 0)//当日为周末
	{

		if (st.wDayOfWeek == 6)
		{
			endSeconds = (24 * 3600) * 1;
		}
		else
		{
			endSeconds = (24 * 3600) * 2;
		}
		int nAddDay = nDaysBefor % 5 == 0 ? -1 : 0;
		startSecond = (24 * 3600) * (nDaysBefor - 1) + (48 * 3600) * (nDaysBefor / 5 + nAddDay) + endSeconds;
	}
	else						//当日即为工作日
	{
		if (st.wDayOfWeek > nDaysBefor)
		{
			startSecond = (24 * 3600) * (nDaysBefor - 1);
		}
		else
		{
			int nAddDay = (nDaysBefor - st.wDayOfWeek) % 5 == 0 ? 0 : 1;
			startSecond = (24 * 3600) * (nDaysBefor - 1) + (48 * 3600) * ((nDaysBefor - st.wDayOfWeek) / 5 + nAddDay);
		}
	}

	return Time_tToSystemTime(selTime_t - startSecond);		//第一个工作日
}

static int IsLeapYear(int year)
{
	if ((year % 4 == 0) && (year % 100 != 0) || year % 400 == 0)
		return 366;
	else
		return 365;
}

const SYSTEMTIME GetFirstWorkDayOfOneYear(const WORD nYear)
{
	int nTotalDays = 0;
	for (int i = 1; i < nYear; i++)
		nTotalDays += IsLeapYear(i);
	int nDayOfWeek = (nTotalDays + 1) % 7;
	int nStartDay = 1;
	int nSetDayOfWeek = nDayOfWeek;
	if (nDayOfWeek == 6)
	{
		nSetDayOfWeek = 1;
		nStartDay += 2;
	}
	else if (nDayOfWeek == 0)
	{
		nSetDayOfWeek = 1;
		nStartDay += 1;
	}
	SYSTEMTIME firstWorkDay = { nYear, 1, nSetDayOfWeek, nStartDay, 0, 0, 0, 0 };
	return firstWorkDay;
}

const string GetFutureCode(SYSTEMTIME sysTm, E_FUTURECODE eType, E_FUTURETIME eMonth)
{
	string szStr;
	if (eType == TYPE_IFCODE)
	{
		szStr = "IF";
	}
	else if (eType == TYPE_IHCODE)
	{
		szStr = "IH";
	}
	else
	{
		szStr = "IC";
	}
	char szTime[5];
	memset(szTime, 0, sizeof(szTime));
	//CURMONTH
	int year = sysTm.wYear % 100;
	int month = sysTm.wMonth;
	bool bNext = false;

	//判断当月第1天是一周的第几天
	int gapDay;
	time_t selTime = SystemTimeToTime_t(sysTm);
	SYSTEMTIME time_fir = Time_tToSystemTime(selTime - (sysTm.wDay - 1)  * 24 * 3600);
	//如果第1天不是第一周日期
	if (time_fir.wDayOfWeek % 6 == 0)			//周末
	{
		gapDay = 1 + (5 + time_fir.wDayOfWeek / 6) + 14;
	}
	else //第一天为周五
	{
		gapDay = 1 + (5 - time_fir.wDayOfWeek) + 14;
	}
	if (sysTm.wDay > gapDay)
	{
		if (month == 12)
		{
			month = 1;
			year += 1;
		}
		else
		{
			month += 1;
		}
	}

	if (eMonth == TIME_NEXTMONTH || bNext)
	{
		if (month == 12)
		{
			month = 1;
			year += 1;
		}
		else
		{
			month += 1;
		}
	}
	else if (eMonth == TIME_ENDOFSEASON)
	{
		month += 3 - month % 3;
		if (month > 12)
		{
			year += 1;
			month %= 12;
		}
	}
	else if (eMonth == TIME_NEXTENDOFSEASON)
	{
		if (month % 3 == 0)
		{
			month += 6;
		}
		if (month > 12)
		{
			year += 1;
			month %= 12;
		}
	}
	sprintf_s(szTime, "%02d%02d", year, month);
	szStr.append(szTime);
	return szStr;
}

  

原文地址:https://www.cnblogs.com/depend-wind/p/9638546.html

时间: 2024-10-10 18:49:33

时间格式数据及字符串的简单处理的相关文章

时间操作(JavaScript版)—最简单比較两个时间格式数据的大小

呵呵呵,在软件研发过程中假设遇到要比較两个时间的大小.你会怎么做.嗯嗯嗯,非常直观的做法就是把"-"去掉,再比較大小,真的有必要吗?看以下最简单的时间比較方式: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">        <html

sql server日期时间格式转换成字符串格式

转载自:http://www.cnblogs.com/zhangq723/archive/2011/02/16/1956152.html

【Hibernate】--时间格式处理

上篇介绍了使用Hibernate来实现简单的数据插入,在这个过程中,我们需要注意的一个地方就是时间格式问题.之前在做SSH网上商城.DRP时也遇到过类似的问题,下面时间格式的转换做一个小总结. 在进行插入时间格式数据时,视频实例中直接使用的New Date()方式获取当前时间.但是自己在demo运行过程中,提示时间格式存在问题,将该时间格式打印出来,发现使用的格式如下: Tue Aug 23 21:59:41 CST 2016 在网上商城部分遇到该问题,解决办法是将所有的datetime类型数据

oracle中往varchar2格式的字段中插入date时间格式的值会发生什么?

--建立表test1 create table TEST1 ( ID    VARCHAR2(40) default sys_guid(), TDATE VARCHAR2(200) ) tablespace APP_TX_DATA pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); --插入date时间格式数据 insert into te

NSdate 时间格式

NSdate 时间格式 NSTimeInterval 时间间隔 基本单位 秒 NSDateFormatter 时间格式器 用于日期对象的格式化或字符串解析为日期对象 日期格式如下: y  年 M  年中的月份 D  当天是今年的第多少天 d  月份中的天数 F  月份中的周数 E  星期几 a  Am/pm H  一天中的小时数(0-23) k  一天中的小时数(1-24) K  am/pm 中的小时数(0-11)  Number  0 h  am/pm 中的小时数(1-12)  Number 

JS的时间差换算(String to 自己想要的时间格式)

JS的时间差换算(String to 标准的时间格式) 1.字符串到标准时间格式: 字符串: var time1="2018-05-11 00:00:00" var time2="2018-05-12 00:00:00" 转到标准时间格式: time1 = new Date(time1); time2 = new Date(time2); 2.获取时间戳的差值var interval=time2.getTime()-time1.getTime() 3.转换为自己所要

js将时间戳转化成时间格式字符串(兼容各种浏览器)

起初为了简便起见,使用了toLocaleString()这个方法,结果问题就出现了. <script type="text/javascript"> new Date(parseInt(1421683200) * 1000).toLocaleString(); //IE浏览器下结果为:2015年1月20日 0:00:00 //Google浏览器下结果为:2015/1/20 上午12:00:00 //Firefox浏览器下结果为:2015/1/20 上午12:00:00 //

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过程并没有数组.列表之类的参数类型,使用XML类型可妥善解决这个问题. 不过,SQL Server2005对标准xml的支持不足,很多地方需要特别处理.举一个例子说明一下. 这个场景是往存储过程里传递一个xml

时间格式的转换(HTTP-GMT字符串--&gt;Long时间)

上一篇中,提供的帮助方法是将long类型的时间格式转化为GMT格式的时间格式, 本篇实现将GMT格式的数据转化为long类型的时间格式,具体的代码如下: //HTTP-GMT字符串-->Long时间public static long gmt2long(String gmttime){ try{ SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);  sd