/** * Generates a display string showing the relative time between the two given times as COleDateTimes */ CString CLoglistUtils::ToRelativeTimeString(COleDateTime time,COleDateTime RelativeTo) { COleDateTimeSpan ts = RelativeTo - time; //years if(fabs(ts.GetTotalDays()) >= 3 * 365) return ExpandRelativeTime((int)ts.GetTotalDays()/365, IDS_YEAR_AGO, IDS_YEARS_AGO); //Months if(fabs(ts.GetTotalDays()) >= 60) return ExpandRelativeTime((int)ts.GetTotalDays()/30, IDS_MONTH_AGO, IDS_MONTHS_AGO); //Weeks if(fabs(ts.GetTotalDays()) >= 14) return ExpandRelativeTime((int)ts.GetTotalDays()/7, IDS_WEEK_AGO, IDS_WEEKS_AGO); //Days if(fabs(ts.GetTotalDays()) >= 2) return ExpandRelativeTime((int)ts.GetTotalDays(), IDS_DAY_AGO, IDS_DAYS_AGO); //hours if(fabs(ts.GetTotalHours()) >= 2) return ExpandRelativeTime((int)ts.GetTotalHours(), IDS_HOUR_AGO, IDS_HOURS_AGO); //minutes if(fabs(ts.GetTotalMinutes()) >= 2) return ExpandRelativeTime((int)ts.GetTotalMinutes(), IDS_MINUTE_AGO, IDS_MINUTES_AGO); //seconds return ExpandRelativeTime((int)ts.GetTotalSeconds(), IDS_SECOND_AGO, IDS_SECONDS_AGO); }
BOOL CNDCheckInDlg::CheckTakeUp(CString strTermId) { //查询该终端是否被占用 BOOL bTakeUp = FALSE; CLastUserInfo LastUserInfo; if (CIBADAL::GetInstance()->GetLastUserInfo(LastUserInfo, 0, strTermId)) { if (LastUserInfo.GetSuspend())//挂机 { bTakeUp = TRUE; } else//非挂机 { COleDateTime updateTime; updateTime.ParseDateTime(LastUserInfo.GetUpdateTime()); COleDateTimeSpan interval = COleDateTime::GetCurrentTime() - updateTime; if (interval.GetTotalMinutes() < 10)//被占用,并且用户还有效 { bTakeUp = TRUE; } } } return bTakeUp; }
BOOL CActiveMember::IsNeedToQuery() { if (GetStatus() == EStatus_LocalOnline) //本地在线 { return IsOffLinePossibility(); } else if (GetStatus() == EStatus_CenterOnLine) //中心在线 { return COleDateTime::GetCurrentTime() >= UpdateDataTime; } else if (GetStatus() == EStatus_AutoReturn) //待退款 { if (UpdateDataTime.GetStatus() != COleDateTime::valid) { return TRUE; } COleDateTimeSpan dtSpan = COleDateTime::GetCurrentTime() - UpdateDataTime; if (dtSpan.GetTotalMinutes() >= GetRefundmentTime()) { return TRUE; } } //{ 2011/11/01-8210-gxx: else if (GetStatus() == EStatus_RoomAutoReturn) { if (UpdateDataTime.GetStatus() != COleDateTime::valid) { return TRUE; } COleDateTimeSpan dtSpan = COleDateTime::GetCurrentTime() - UpdateDataTime; if (dtSpan.GetTotalMinutes() >= 2.0) // 超过2分钟,主账号就可以自动退款了 { return TRUE; } } //} return FALSE; }
CString FiletimeAsTimeSpan(const PROPVARIANT& propVar) { FILETIME ftNull; ftNull.dwLowDateTime = 0; ftNull.dwHighDateTime = 0; COleDateTime coledtNull(ftNull); COleDateTime coledtEditTime(propVar.filetime); COleDateTimeSpan coledtsTotalEditTime = coledtEditTime - coledtNull; CString sPropValue; sPropValue.Format(_T("%.0f"), coledtsTotalEditTime.GetTotalMinutes()); return sPropValue; }
void CDefineBundleTimeDlg::OnBnClickedOk() { CString strRet; COleDateTime startTime; startTime.ParseDateTime(m_btnStartTime.ToString()); COleDateTime endTime; endTime.ParseDateTime(m_btnEndTime.ToString()); COleDateTimeSpan sp = endTime - startTime; UINT nAllMinites = (LONG)sp.GetTotalMinutes(); if (nAllMinites <= 0) { strRet = _T("包时时间有误,请重新选择!"); SetToolTipPos(IDOK); ShowToolTip(strRet); return; } CString strMoney; m_edtBundTimeMoney.GetWindowText(strMoney); if (strMoney.IsEmpty()) { GetDlgItem(IDC_EDIT_BUNDTIMEMONEY)->SetFocus(); return; } CWaitCursor Wait; double dBundTimeMoney = _tstof(strMoney); UINT nBundTimeMoney = (dBundTimeMoney + 0.005) * 100; //作舍入转换 INT nIdx = m_cboArea.GetCurSel(); //2011-4-18-gxx: 保存开户时自定义包时的参数设置 m_BundleTimeInfo.TimeId = 9999; m_BundleTimeInfo.BeginTime = startTime.Format(_T("%Y%m%d%H%M%S")); m_BundleTimeInfo.TimePass = nAllMinites; m_BundleTimeInfo.Amount = nBundTimeMoney; m_BundleTimeInfo.PcClass = m_cboArea.GetItemData(nIdx); m_BundleTimeInfo.AccountType = m_cboAccountType.GetCurSel(); m_BundleTimeInfo.bIsSelected = TRUE; OnOK(); }
void CChartAxis::CalculateTickIncrement() { if (!m_bAutoTicks) return; if (m_MaxValue == m_MinValue) { m_iDTTickIntervalMult = 0; m_TickIncrement = 0; return; } int PixelSpace; if (m_bIsHorizontal) { if (m_AxisType == atDateTime) PixelSpace = 60; else PixelSpace = 30; } else PixelSpace = 20; int MaxTickNumber = (int)fabs((m_EndPos-m_StartPos)/PixelSpace * 1.0); //Calculate the appropriate TickSpace (1 tick every 30 pixel +/-) switch (m_AxisType) { case atLogarithmic: m_TickIncrement = 10; break; case atStandard: { //Temporary tick increment double TickIncrement = (m_MaxValue-m_MinValue)/MaxTickNumber; // Calculate appropriate tickSpace (not rounded on 'strange values' but // on something like 1, 2 or 5*10^X where X is optimalized for showing the most // significant digits) int Zeros = (int)floor(log10(TickIncrement)); double MinTickIncrement = pow(10.0,Zeros); int Digits = 0; if (Zeros<0) { //We must set decimal places. In the other cases, Digits will be 0. Digits = (int)fabs(Zeros*1.0); } if (MinTickIncrement>=TickIncrement) { m_TickIncrement = MinTickIncrement; SetDecimals(Digits); } else if (MinTickIncrement*2>=TickIncrement) { m_TickIncrement = MinTickIncrement*2; SetDecimals(Digits); } else if (MinTickIncrement*5>=TickIncrement) { m_TickIncrement = MinTickIncrement*5; SetDecimals(Digits); } else if (MinTickIncrement*10>=TickIncrement) { m_TickIncrement = MinTickIncrement*10; if (Digits) SetDecimals(Digits-1); else SetDecimals(Digits); } } break; case atDateTime: { COleDateTime StartDate(m_MinValue); COleDateTime EndDate(m_MaxValue); COleDateTimeSpan minTickInterval = (EndDate - StartDate)/MaxTickNumber; double Seconds = minTickInterval.GetTotalSeconds(); double Minutes = minTickInterval.GetTotalMinutes(); double Hours = minTickInterval.GetTotalHours(); double Days = minTickInterval.GetTotalDays(); if (Seconds < 60) { m_BaseInterval = tiSecond; if (Seconds > 30) { m_BaseInterval = tiMinute; m_iDTTickIntervalMult = 1; } else if (Seconds > 10) m_iDTTickIntervalMult = 30; else if (Seconds > 5) m_iDTTickIntervalMult = 10; else if (Seconds > 2) m_iDTTickIntervalMult = 5; else m_iDTTickIntervalMult = 1; } else if (Minutes < 60) { m_BaseInterval = tiMinute; if (Minutes > 30) { m_BaseInterval = tiHour; m_iDTTickIntervalMult = 1; } else if (Minutes > 10) m_iDTTickIntervalMult = 30; else if (Minutes > 5) m_iDTTickIntervalMult = 10; else if (Minutes > 2) m_iDTTickIntervalMult = 5; else m_iDTTickIntervalMult = 2; } else if (Hours < 24) { m_BaseInterval = tiHour; if (Hours > 12) { m_BaseInterval = tiDay; m_iDTTickIntervalMult = 1; } else if (Hours > 6) m_iDTTickIntervalMult = 12; else if (Hours > 2) m_iDTTickIntervalMult = 6; else m_iDTTickIntervalMult = 2; } else if (Days < 31) { m_BaseInterval = tiDay; if (Days > 7) { m_BaseInterval = tiMonth; m_iDTTickIntervalMult = 1; } else if (Days > 2) { m_BaseInterval = tiDay; m_iDTTickIntervalMult = 7; } else m_iDTTickIntervalMult = 2; } else if (Days < 365) { m_BaseInterval = tiMonth; if (Days > 186) // Approx 6 months { m_BaseInterval = tiYear; m_iDTTickIntervalMult = 1; } else if (Days > 124) m_iDTTickIntervalMult = 6; else if (Days > 62) m_iDTTickIntervalMult = 4; else m_iDTTickIntervalMult = 2; } else { m_BaseInterval = tiYear; m_iDTTickIntervalMult = (int)Days/365 + 1; } if (m_bAutoTickFormat) RefreshDTTickFormat(); } break; } }
BOOL CXTPCalendarRemindersManager::StartMonitoring(CXTPCalendarResources* pResources, COleDateTimeSpan spPeriod2Cache) { if (!GetSafeHwnd()) { if (!_CreateWnd()) { ASSERT(FALSE); return FALSE; } } //*********************************** if (IsMonitoringRunning()) { StopMonitoring(); } //*********************************** RemoveAll(); XTP_SAFE_CALL1(m_pResourcesNf, RemoveAll()); m_Sink.UnadviseAll(); //----------------------------------- ASSERT(pResources); ASSERT(CXTPCalendarUtils::GetTotalSeconds(spPeriod2Cache) > 0); if (!pResources || !m_pResourcesNf) { return FALSE; } DBG_REMINDERS_TRACE(_T("%s - CXTPCalendarRemindersManager::StartMonitoring(). period = %d min \n"), (LPCTSTR)CXTPCalendarUtils::GetCurrentTime().Format(), (int)spPeriod2Cache.GetTotalMinutes()); m_pResourcesNf->Append(pResources); m_spPeriod2Cache = spPeriod2Cache; //------------------------------------ // Advise to Data Provider notifications CXTPNotifyConnection* pConnRC = m_pResourcesNf->GetConnection(); ASSERT(pConnRC); if (pConnRC) { m_Sink.Advise(pConnRC, XTP_NC_CALENDAREVENTWASADDED, &CXTPCalendarRemindersManager::OnEventChanged); m_Sink.Advise(pConnRC, XTP_NC_CALENDAREVENTWASDELETED, &CXTPCalendarRemindersManager::OnEventChanged); m_Sink.Advise(pConnRC, XTP_NC_CALENDAREVENTWASCHANGED, &CXTPCalendarRemindersManager::OnEventChanged); } m_pResourcesNf->ReBuildInternalData(); //------------------------------------ COleDateTime dtNow = CXTPCalendarUtils::GetCurrentTime(); UpdateDataFromDP(dtNow, m_spPeriod2Cache); SetTimer(TIMERID_RMD_REFRESH, XTP_CALENDAR_RMD_REFRESH_TIMEOUT, NULL); //-------------------------------------------------------- m_bMonitoringRunning = TRUE; NotifyReminders(xtpCalendarRemindersMonitoringStarted); return TRUE; }
double CChartDateTimeAxis::GetTickBeforeVal(double dValue) const { double precision = 0.0000000001; if (dValue < 0) precision = -0.0000000001; COleDateTime tickBefore; COleDateTime valueTime = COleDateTime(DATE(dValue+precision)); COleDateTimeSpan dtSpan = valueTime - m_ReferenceTick; switch (m_BaseInterval) { case tiSecond: { int totalSecs = (int)dtSpan.GetTotalSeconds(); totalSecs = (totalSecs/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; int Days = totalSecs/86400; // 86400 seconds in one day int Hours = (totalSecs%86400)/3600; // 3600 seconds in one hour int Minutes = ((totalSecs%86400)%3600)/60; // 60 seconds in one minute int Seconds = ((totalSecs%86400)%3600)%60; dtSpan.SetDateTimeSpan(Days, Hours, Minutes, Seconds); tickBefore = m_ReferenceTick + dtSpan; } break; case tiMinute: { int totalMinutes = (int)dtSpan.GetTotalMinutes(); totalMinutes = (totalMinutes/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; int Days = totalMinutes/1440; // 1440 minutes in one day int Hours = (totalMinutes%1440)/60; // 60 minutes in one hour int Minutes = (totalMinutes%1440)%60; dtSpan.SetDateTimeSpan(Days, Hours, Minutes, 0); tickBefore = m_ReferenceTick + dtSpan; } break; case tiHour: { int totalHours = (int)dtSpan.GetTotalHours(); totalHours = (totalHours/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; int Days = totalHours/24; // 24 hours in one day int Hours = totalHours%24; dtSpan.SetDateTimeSpan(Days, Hours, 0, 0); tickBefore = m_ReferenceTick + dtSpan; } break; case tiDay: { int totalDays = (int)dtSpan.GetTotalDays(); totalDays = (totalDays/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; dtSpan.SetDateTimeSpan(totalDays, 0, 0, 0); tickBefore = m_ReferenceTick + dtSpan; } break; case tiMonth: { int yearDiff = valueTime.GetYear() - m_ReferenceTick.GetYear(); int monthDiff = valueTime.GetMonth() - m_ReferenceTick.GetMonth(); int totalMonths = ((yearDiff*12+monthDiff)/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; tickBefore = AddMonthToDate(m_ReferenceTick,totalMonths); } break; case tiYear: { int yearDiff = valueTime.GetYear() - m_ReferenceTick.GetYear(); int year = ((yearDiff)/m_iDTTickIntervalMult) * m_iDTTickIntervalMult; tickBefore = AddMonthToDate(m_ReferenceTick,year*12); } break; } return (DATE)tickBefore; }
void CChartDateTimeAxis::RefreshTickIncrement() { if (!m_bAutoTicks) return; if (m_MaxValue == m_MinValue) { m_iDTTickIntervalMult = 1; return; } int PixelSpace; if (m_bIsHorizontal) PixelSpace = 60; else PixelSpace = 20; int MaxTickNumber = (int)fabs((m_EndPos-m_StartPos)/PixelSpace * 1.0); if (MaxTickNumber == 0) MaxTickNumber = 1; COleDateTime StartDate(m_MinValue); COleDateTime EndDate(m_MaxValue); COleDateTimeSpan minTickInterval = (EndDate - StartDate)/MaxTickNumber; double Seconds = minTickInterval.GetTotalSeconds(); double Minutes = minTickInterval.GetTotalMinutes(); double Hours = minTickInterval.GetTotalHours(); double Days = minTickInterval.GetTotalDays(); if (Seconds < 60) { m_BaseInterval = tiSecond; if (Seconds > 30) { m_BaseInterval = tiMinute; m_iDTTickIntervalMult = 1; } else if (Seconds > 10) m_iDTTickIntervalMult = 30; else if (Seconds > 5) m_iDTTickIntervalMult = 10; else if (Seconds > 2) m_iDTTickIntervalMult = 5; else m_iDTTickIntervalMult = 1; } else if (Minutes < 60) { m_BaseInterval = tiMinute; if (Minutes > 30) { m_BaseInterval = tiHour; m_iDTTickIntervalMult = 1; } else if (Minutes > 10) m_iDTTickIntervalMult = 30; else if (Minutes > 5) m_iDTTickIntervalMult = 10; else if (Minutes > 2) m_iDTTickIntervalMult = 5; else m_iDTTickIntervalMult = 2; } else if (Hours < 24) { m_BaseInterval = tiHour; if (Hours > 12) { m_BaseInterval = tiDay; m_iDTTickIntervalMult = 1; } else if (Hours > 6) m_iDTTickIntervalMult = 12; else if (Hours > 2) m_iDTTickIntervalMult = 6; else m_iDTTickIntervalMult = 2; } else if (Days < 31) { m_BaseInterval = tiDay; if (Days > 7) { m_BaseInterval = tiMonth; m_iDTTickIntervalMult = 1; } else if (Days > 2) { m_BaseInterval = tiDay; m_iDTTickIntervalMult = 7; } else m_iDTTickIntervalMult = 2; } else if (Days < 365) { m_BaseInterval = tiMonth; if (Days > 186) // Approx 6 months { m_BaseInterval = tiYear; m_iDTTickIntervalMult = 1; } else if (Days > 124) m_iDTTickIntervalMult = 6; else if (Days > 62) m_iDTTickIntervalMult = 4; else m_iDTTickIntervalMult = 2; } else { m_BaseInterval = tiYear; m_iDTTickIntervalMult = (int)Days/365 + 1; } }