添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
//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, 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; 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; endSeconds = (24 * 3600) * 2; return Time_tToSystemTime(selTime_t - endSeconds); //当前时间点为工作日 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; 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); 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; 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"; 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; month += 1; if (eMonth == TIME_NEXTMONTH || bNext) if (month == 12) month = 1; year += 1; 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;