【抛砖引玉】我写了一个求时间两个字符串的时间差的函数,谁有更好的方法,请进来说一下。
djfu 2005-11-25 06:36:50 谁有更好的方法,请进来说一下。
时间字符串格式: yyyy-MM-dd hh:mm:ss, 求两个时间字符串的时间差(单位:秒
)
//---------------------------------------------------------------------------
// 求时间差
// long nDelta;
// BOOL bRet = DateTimeSpan("2005-11-20 01:20:00", "2005-11-20 02:30:30",
// nelta);
// nDelta = 4230
BOOL __fastcall TForm1::DateTimeSpan(String sStartDateTime, String sEndDateTime, long &nDeltaSeconds)
{
if( (sStartDateTime.Length() != 19) || (sEndDateTime.Length() != 19) )
return FALSE;
char szTime[20];
int nYear = -1, nMon = -1, nDay = -1, nHour = -1, nMinute = -1, nSecond = -1;
memset(szTime, 0, sizeof(szTime));
strcpy(szTime, sStartDateTime.c_str());
sscanf( szTime, "%04d-%02d-%02d %02d:%02d:%02d",
&nYear, &nMon, &nDay,
&nHour, &nMinute, &nSecond);
if((nYear == -1) || (nMon == -1) || (nDay == -1) ||
(nHour == -1) || (nMinute == -1) || (nSecond == -1) )
return FALSE;
memset(szTime, 0, sizeof(szTime));
strcpy(szTime, sEndDateTime.c_str());
sscanf( szTime, "%04d-%02d-%02d %02d:%02d:%02d",
&nYear, &nMon, &nDay,
&nHour, &nMinute, &nSecond);
if((nYear == -1) || (nMon == -1) || (nDay == -1) ||
(nHour == -1) || (nMinute == -1) || (nSecond == -1) )
return FALSE;
BOOL bNeedReturnPositiveValue = FALSE;
if(sStartDateTime > sEndDateTime)
{
String sTemp;
sTemp = sEndDateTime;
sEndDateTime = sStartDateTime;
sStartDateTime = sTemp;
bNeedReturnPositiveValue = TRUE;
}
TDateTime dtStartTime(sStartDateTime.SubString(12, 8)), dtEndTime(sEndDateTime.SubString(12, 8)), dtTimeSpan;
dtTimeSpan = dtEndTime - dtStartTime;
String sTimeStr = dtTimeSpan.TimeString();
memset(szTime, 0, sizeof(szTime));
strcpy(szTime, sTimeStr.c_str());
sscanf( szTime, "%02d:%02d:%02d", &nHour, &nMinute, &nSecond);
TDateTime dtStartDay(sStartDateTime.SubString(1, 11)), dtEndDay(sEndDateTime.SubString(1, 11)), dtDaySpan;
dtDaySpan = dtEndDay - dtStartDay;
if(sStartDateTime.SubString(12, 8) > sEndDateTime.SubString(12, 8))
nDeltaSeconds = dtDaySpan.Val * 24 * 60 * 60 - nHour * 60 * 60 - nMinute * 60 - nSecond;
else
nDeltaSeconds = dtDaySpan.Val * 24 * 60 * 60 + nHour * 60 * 60 + nMinute * 60 + nSecond;
if(bNeedReturnPositiveValue)
nDeltaSeconds = - nDeltaSeconds;
return TRUE;
}