?? commoncal.cpp
字號:
// CommonCal.cpp: implementation of the CommonCal class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CommonCal.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
//static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CommonCal::CommonCal()
{
}
CommonCal::~CommonCal()
{
}
//////////////////////////////////////////////////////////////////////
// 雨量數值處理,四舍六入,奇進偶舍算法
//////////////////////////////////////////////////////////////////////
bool CommonCal::RainValProc()
{
int i=0;//取有效數字倒數第二位
int j=0;//取有效數字最后一位
int k=0;//取有效數字后一位
int l=0;//取k后的部分
int intValid=0;//取有效數字部分
/*
intValid=int(m_dblInputVal*pow(10,m_intKeepDot));
i=int(m_dblInputVal*pow(10,(m_intKeepDot-1)))%10;
j=intValid%10;
k=int(m_dblInputVal*pow(10,(m_intKeepDot+1)))%10;
l=int(m_dblInputVal*pow(10,m_intInputDot))%(int(pow(10,(m_intInputDot-m_intKeepDot-1))));
if(k>5){
intValid=intValid+1;
}
else{
if(k==5){
if(l>0){
intValid=intValid+1;
}
else if((i%2)==1){
intValid=intValid+1;
}
}
}*/
m_strOutputVal.Format("%.1f",m_dblInputVal);
return true;
}
//////////////////////////////////////////////////////////////////////
// 水位數值處理
//////////////////////////////////////////////////////////////////////
bool CommonCal::WaterValProc()
{
/*
int i=0;
int j=0;
int intValid=0;
i=int(pow(10,m_intKeepDot));
j=int(pow(10,m_intKeepInt+m_intKeepDot));
intValid=int(m_dblInputVal*pow(10,m_intKeepDot)+0.5);
intValid=intValid%j;*/
m_strOutputVal.Format("%.2f",m_dblInputVal);
return true;
}
//////////////////////////////////////////////////////////////////////
// 時間處理
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeValProc()
{
struct tm tmTime;
float fltHour;
float fltMinute;
float fltSecond;
int intMday;
tmTime=StrToTime(m_strInputTime);
intMday=GetMonthEndDay(&tmTime);
m_intMonth=tmTime.tm_mon;
m_intDay=tmTime.tm_mday;
m_intHour=tmTime.tm_hour;
m_intMinute=tmTime.tm_min;
fltHour=(float)tmTime.tm_hour;
/*
if(fltHour==0){
fltHour=24;
m_intDay--;
if(m_intDay<=0)m_intDay+=intMday;
}*/
fltMinute=(float)tmTime.tm_min;
fltSecond=(float)tmTime.tm_sec;
m_fltTime=fltHour+(fltMinute+fltSecond/60)/60;
if(m_fltTime<8)m_fltInterval=24-m_fltTime+8;
else m_fltInterval=m_fltTime-8;
m_strOutputTime.Format("%02d%02d%02d%02d",m_intMonth,m_intDay,m_intHour,m_intMinute);
return true;
}
/*
//////////////////////////////////////////////////////////////////////
// 日期處理
//////////////////////////////////////////////////////////////////////
struct tm CommonCal::DateValProc(CString strInputTime)
{
struct tm tmTime;
CString strDate,strTime,strBuffer;
CString strYear,strMonth,strDay,strHour,strMinute,strSecond;
int intStart,intLength;
intLength=strInputTime.GetLength();
intStart=strInputTime.FindOneOf(" ");
if(intStart==-1){
strDate=strInputTime;
strTime="00:00:00";
}
else{
strDate=strInputTime.Left(intStart);
strTime=strInputTime.Right(intLength-intStart-1);
}
strYear=strDate.Left(4);
intLength=strDate.GetLength();
strBuffer=strDate.Right(intLength-5);
intStart=strBuffer.FindOneOf("-");
strMonth=strBuffer.Left(intStart);
intLength=strBuffer.GetLength();
strDay=strBuffer.Right(intLength-intStart-1);
intStart=strTime.FindOneOf(":");
strHour=strTime.Left(intStart);
strMinute=strTime.Mid(intStart+1,2);
strSecond=strTime.Mid(intStart+4,2);
tmTime.tm_year=atoi((LPCTSTR)strYear);
tmTime.tm_mon=atoi((LPCTSTR)strMonth);
tmTime.tm_mday=atoi((LPCTSTR)strDay);
tmTime.tm_hour=atoi((LPCTSTR)strHour);
tmTime.tm_min=atoi((LPCTSTR)strMinute);
tmTime.tm_sec=atoi((LPCTSTR)strSecond);
return tmTime;
}
*/
//////////////////////////////////////////////////////////////////////
// 字符串轉換成日期類型
//////////////////////////////////////////////////////////////////////
struct tm CommonCal::StrToTime(CString strInputTime)
{
struct tm tmTime;
CString strDate,strTime,strBuffer;
CString strYear,strMonth,strDay,strHour,strMinute,strSecond;
int intStart,intLength;
intLength=strInputTime.GetLength();
intStart=strInputTime.FindOneOf(" ");
if(intStart==-1){
strDate=strInputTime;
strTime="00:00:00";
}
else{
strDate=strInputTime.Left(intStart);
strTime=strInputTime.Right(intLength-intStart-1);
}
strYear=strDate.Left(4);
intLength=strDate.GetLength();
strBuffer=strDate.Right(intLength-5);
intStart=strBuffer.FindOneOf("-");
strMonth=strBuffer.Left(intStart);
intLength=strBuffer.GetLength();
strDay=strBuffer.Right(intLength-intStart-1);
intStart=strTime.FindOneOf(":");
strHour=strTime.Left(intStart);
strMinute=strTime.Mid(intStart+1,2);
strSecond=strTime.Mid(intStart+4,2);
tmTime.tm_year=atoi((LPCTSTR)strYear);
tmTime.tm_mon=atoi((LPCTSTR)strMonth);
tmTime.tm_mday=atoi((LPCTSTR)strDay);
tmTime.tm_hour=atoi((LPCTSTR)strHour);
tmTime.tm_min=atoi((LPCTSTR)strMinute);
tmTime.tm_sec=atoi((LPCTSTR)strSecond);
return tmTime;
}
//////////////////////////////////////////////////////////////////////
// 日期轉換字符串處理
//////////////////////////////////////////////////////////////////////
CString CommonCal::TimeToStr(struct tm tmTime)
{
CString strTime;
strTime.Format("%04d-%02d-%02d %02d:%02d:%02d",tmTime.tm_year,tmTime.tm_mon,tmTime.tm_mday,tmTime.tm_hour,tmTime.tm_min,tmTime.tm_sec);
return strTime;
}
//////////////////////////////////////////////////////////////////////
// 日期大小比較處理
//////////////////////////////////////////////////////////////////////
int CommonCal::TimeCompare(struct tm tmTime1,struct tm tmTime2)
{
CString strTime;
if(tmTime1.tm_year>tmTime2.tm_year)return 1;
if(tmTime1.tm_year<tmTime2.tm_year)return -1;
if(tmTime1.tm_mon>tmTime2.tm_mon)return 1;
if(tmTime1.tm_mon<tmTime2.tm_mon)return -1;
if(tmTime1.tm_mday>tmTime2.tm_mday)return 1;
if(tmTime1.tm_mday<tmTime2.tm_mday)return -1;
if(tmTime1.tm_hour>tmTime2.tm_hour)return 1;
if(tmTime1.tm_hour<tmTime2.tm_hour)return -1;
if(tmTime1.tm_min>tmTime2.tm_min)return 1;
if(tmTime1.tm_min<tmTime2.tm_min)return -1;
if(tmTime1.tm_sec>tmTime2.tm_sec)return 1;
if(tmTime1.tm_sec<tmTime2.tm_sec)return -1;
return 0;
}
//////////////////////////////////////////////////////////////////////
// 計算加上一個時間間隔后的日期
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeAddSpan(struct tm *tmTime,int intYear,int intMonth,int intDay,int intHour,int intMinute,int intSecond)
{
int intMday=0;
intMday=GetMonthEndDay(tmTime);
tmTime->tm_sec+=intSecond;
if(tmTime->tm_sec>=60){
tmTime->tm_sec-=60;
intMinute++;
}
tmTime->tm_min+=intMinute;
if(tmTime->tm_min>=60){
tmTime->tm_min-=60;
intHour++;
}
tmTime->tm_hour+=intHour;
if(tmTime->tm_hour>=24){
tmTime->tm_hour-=24;
intDay++;
}
tmTime->tm_mday+=intDay;
if(tmTime->tm_mday>intMday){
tmTime->tm_mday-=intMday;
intMonth++;
}
tmTime->tm_mon+=intMonth;
if(tmTime->tm_mon>12){
tmTime->tm_mon-=12;
intYear++;
}
tmTime->tm_year+=intYear;
return true;
}
//////////////////////////////////////////////////////////////////////
// 計算減去一個時間間隔后的日期
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeSubSpan(struct tm *tmTime,int intYear,int intMonth,int intDay,int intHour,int intMinute,int intSecond)
{
int intMday=0;
intMday=GetMonthEndDay(tmTime);
tmTime->tm_sec-=intSecond;
if(tmTime->tm_sec<0){
tmTime->tm_sec+=60;
intMinute++;
}
tmTime->tm_min-=intMinute;
if(tmTime->tm_min<0){
tmTime->tm_min+=60;
intHour++;
}
tmTime->tm_hour-=intHour;
if(tmTime->tm_hour<0){
tmTime->tm_hour+=24;
intDay++;
}
tmTime->tm_mday-=intDay;
if(tmTime->tm_mday<1){
tmTime->tm_mday+=intMday;
intMonth++;
}
tmTime->tm_mon-=intMonth;
if(tmTime->tm_mon<1){
tmTime->tm_mon+=12;
intYear++;
}
tmTime->tm_year-=intYear;
return true;
}
//////////////////////////////////////////////////////////////////////
// 計算月底日期
//////////////////////////////////////////////////////////////////////
int CommonCal::GetMonthEndDay(struct tm *tmTime)
{
int intMday=0;
switch(tmTime->tm_mon){
case 1:{
intMday=31;
break;
}
case 3:{
intMday=31;
break;
}
case 5:{
intMday=31;
break;
}
case 7:{
intMday=31;
break;
}
case 8:{
intMday=31;
break;
}
case 10:{
intMday=31;
break;
}
case 12:{
intMday=31;
break;
}
case 2:{
intMday=28;
break;
}
case 4:{
intMday=30;
break;
}
case 6:{
intMday=30;
break;
}
case 9:{
intMday=30;
break;
}
case 11:{
intMday=30;
break;
}
default:break;
}
if(IsLeapYear(tmTime)&&intMday==28)intMday=29;
return intMday;
}
//////////////////////////////////////////////////////////////////////
// 判斷是否為閏年
//////////////////////////////////////////////////////////////////////
bool CommonCal::IsLeapYear(struct tm *tmTime)
{
if((tmTime->tm_year%100==0&&tmTime->tm_year%400==0)||(tmTime->tm_year%100!=0&&tmTime->tm_year%4==0))return true;
else return false;
}
//////////////////////////////////////////////////////////////////////
// 流量數值處理
//////////////////////////////////////////////////////////////////////
CString CommonCal::FlowValProc(double dblInputVal)
{
int intDigitCnt=0;
//int intIntCnt=0;
int intFlowVal=0;
CString strOutputVal;
if(dblInputVal<=0){
strOutputVal="0";
}
else{
intDigitCnt=(int)log10(dblInputVal)+1;
if(intDigitCnt<=0) intFlowVal=(int)dblInputVal*1000;
else intFlowVal=(int)(dblInputVal/pow(10,intDigitCnt-3));
strOutputVal.Format("%1d%3d1",intDigitCnt,intFlowVal);
}
if(dblInputVal==0){
strOutputVal="0";
return strOutputVal;
}
if(dblInputVal>=100){
strOutputVal.Format("%.0f",dblInputVal);
return strOutputVal;
}
if(dblInputVal>=10){
strOutputVal.Format("%.1f",dblInputVal);
return strOutputVal;
}
if(dblInputVal>=1){
strOutputVal.Format("%.2f",dblInputVal);
return strOutputVal;
}
if(dblInputVal>=0.1){
strOutputVal.Format("%.2f",dblInputVal);
return strOutputVal;
}
strOutputVal.Format("%.3f",dblInputVal);
return strOutputVal;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -