Click here to Skip to main content
Click here to Skip to main content

Comparing COleDateTime objects

, 14 Nov 2001
Rate this:
Please Sign up or sign in to vote.
Solution to the bad working COleDateTime comparing methods

Introduction

I detected the following problem with the COleDateTime ==, <, >, <=, >= operators. A COleDateTime object is internally represented by a double. So, when comparing two COleDateTime objects it is in fact two doubles that are being compared and this means trouble. E.g. I saw that two COleDateTime objects that were perfectly equal (in human readable format) were indicated as not equal with the COleDateTime == operator.

Solution

Do the comparing yourself based on a string-compare of the COleDateTime objects. These are the functions that I am using now.

BOOL DatesEqual(COleDateTime &odt1, COleDateTime &odt2)
{
    CString str1 = odt1.Format();
    CString str2 = odt2.Format();

    return (!str1.Compare(str2));
}

BOOL DateSmallerThan(COleDateTime &odt1, 
    COleDateTime &odt2)
{
    if (DatesEqual(odt1, odt2)) 
        return FALSE;
    else 
        return odt1 < odt2;
}

BOOL DateGreaterThan(COleDateTime &odt1, 
    COleDateTime &odt2)
{
    if (DatesEqual(odt1, odt2)) 
        return FALSE;
    else 
        return odt1 > odt2;
}

BOOL DateSmallerThanOrEqual(COleDateTime &odt1, 
    COleDateTime &odt2)
{
    if (DatesEqual(odt1, odt2)) 
        return TRUE;
    else 
        return odt1 < odt2;
}

BOOL DateGreaterThanOrEqual(COleDateTime &odt1, 
    COleDateTime &odt2)
{
    if (DatesEqual(odt1, odt2)) 
        return TRUE;
    else 
        return odt1 > odt2;
}

Another aid in programming more accurate when using COleDateTimeSpan objects is the following. Suppose you want to produce a sequence of 15 minute ColeDateTime objects, starting at some point in time. Normally, one would program this something like:

COleDateTimeSpan span;
span = COleDateTimeSpan(0,0,15,0);
ColeDateTime StartTime, DateTimeWalker;
StartTime = ...; //init with the first moment
DateTimeWalker = StartTime;
for (int i=0; i<NR_OF_QUARTERS; i++)
{
    //do something with DateTimeWalker
    ...
    DateTimeWalker += span;
}

However, it is more accurate to replace the body of the loop by:

{
    COleDateTimeSpan dtsSpan(0,0,i*15,0);
    COleDateTime TimeToUse = StartTime + dtsSpan;
    //do something with TimeToUse
    ...
}

This way, no error is accumulated during the loop, resulting in an almost perfect value for the variable TimeToUse even for the last loop iteration. Hope this is helpful to you

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Geert Delmeiren
Software Developer (Senior)
Belgium Belgium
The first 5 years of my career I programmed in pure C. (Production automatisation software)
In Q4 of 1997 I switched to Visual C++/MFC.
(Headend Management system for cable operators)
 
In Q1 of 2003 I changed job and since then I'm programming in JAVA. So, now I'm looking for a JAVA site as brilliant as I found this one for C++.
 
Two years ago I started also programming in Adobe Flex.

Comments and Discussions

 
Questionhow COleDateTime create m_dt (Double),what isformula? Pinmembervahid_m_200817-Jun-08 4:34 
Questionhow COleDateTime create m_dt (Double),what it formula? Pinmembervahid_m_200817-Jun-08 4:34 
GeneralPlease don't do this! PinmemberMarc Brooks28-Nov-01 13:09 
GeneralRe: Please don't do this! PinmemberGeert Delmeiren28-Nov-01 21:24 
GeneralQuestion PinmemberBrian V Shifrin16-Nov-01 5:05 
GeneralRe: Question PinmemberGeert Delmeiren18-Nov-01 22:36 
GeneralRe: Question PinmemberBrian V Shifrin6-Jan-02 7:31 
GeneralRe: Question PinmemberGeert Delmeiren6-Jan-02 21:48 
GeneralRe: Question PinmemberSachu13-Feb-02 2:27 
GeneralRe: Question PinmemberBeaker18-Nov-01 23:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.141223.1 | Last Updated 15 Nov 2001
Article Copyright 2001 by Geert Delmeiren
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid