Mark A Matte
markamatte at hotmail.com
Wed Jan 23 11:54:03 CST 2008
Thanks Everyone, I never thought of 30 minutes as 1/48 of a day. It does feel better knowing that my looking at 2 identical things...and them not being = was my ignorance and not my insanity. Is this 'issue' just in access...maybe excel...and what about SQL Server? Thanks, Mark A. Matte > Date: Wed, 23 Jan 2008 18:30:33 +0100 > From: Gustav at cactus.dk > To: accessd at databaseadvisors.com > Subject: Re: [AccessD] Loop Until Date=Date > > Hi Mark > > No, it is just that a date time value really is a Double, and subtracting Doubles will cause rounding errors sooner or later. > And you do perform a subtraction because the comparison > > RecordDT = RecordDT_end > > is performed behind the scene as > > RecordDT - RecordDT_end = 0 > > Thus, always either use the DateSerial, TimeSerial, DateDiff, DateAdd, etc functions when handling date times, or be very careful with rounding errors, or test for an interval (comparing only>= or <= as Drew suggests is only halfway safe) > > Abs(RecordDT - RecordDT_end) <= 0.0001 > > Here are the functions we use to round a date time value correctly: > > > > Private Const clngSecondsPerDay As Long = 24& * 60& * 60& > > Public Function DateTimeRound( _ > ByVal datTime As Date) _ > As Date > > ' Returns datTime rounded off to the second by > ' removing a millisecond portion. > ' > ' 2006-01-23, Cactus Data ApS, CPH > > > Call RoundSecondOff(datTime) > > DateTimeRound = datTime > > End Function > > Private Sub RoundSecondOff( _ > ByRef datDate As Date) > > ' Rounds off datDate to the second by > ' removing a millisecond portion. > ' > ' 2006-01-23, Cactus Data ApS, CPH > > Dim lngDate As Long > Dim lngTime As Long > Dim dblTime As Double > > ' Get date part. > lngDate = Fix(datDate) > ' Get time part. > dblTime = datDate - lngDate > ' Round time part to the second. > lngTime = Fix(dblTime * clngSecondsPerDay) > ' Return date part and rounded time part. > datDate = CVDate(lngDate + lngTime / clngSecondsPerDay) > > End Sub > > > > /gustav > > >>>> markamatte at hotmail.com 23-01-2008 17:59:50>>> > > Ok...its now clear as mud... > > RecordDT = 12/17/2007 4:30:00 PM > RecordDT_end =12/17/2007 4:30:00 PM > CDbl(RecordDT)=39433.6875 > CDbl(RecordDT_End)=39433.6875 > CDbl(RecordDT-RecordDT_End)=3.63797880709171E-11 > > I'm not liking computers very much right now...so...since I added 30 minutes I have this problem? > > ...and Going forward...I should never ask if 2 DateTime values are equal...I should compare using datediff and seconds? > > Thanks, > > Mark A. Matte > > >> Date: Wed, 23 Jan 2008 17:35:38 +0100 >> From: Gustav at cactus.dk >> To: accessd at databaseadvisors.com >> Subject: Re: [AccessD] Loop Until Date=Date >> >> Hi Mark >> >> But what about: CDbl(RecordDT - RecordDT_end)? >> >> /gustav >> >>>>> markamatte at hotmail.com 23-01-2008 17:31:30>>> >> >> That was the first thing I did...both are showing 12/17/2007 4:30:00 PM...but the "=" fails. >> >> Thanks, >> >> Mark A. Matte >> >> >>> Date: Wed, 23 Jan 2008 11:22:05 -0500 >>> From: fuller.artful at gmail.com >>> To: accessd at databaseadvisors.com >>> Subject: Re: [AccessD] Loop Until Date=Date >>> >>> I would add a Debug.Print statement at the top or bottom of the loop to >>> print out both values in Long Date format so you can see all the particulars >>> of both values. That should reveal the difference, and why equality is >>> failing. >>> >>> A. >>> >>> On 1/23/08, Mark A Matte wrote: >>>> >>>> >>>> Hello All, >>>> >>>> Thanks for the suggestions. I found last night that "DateDiff("s", >>>> RecordDT, RecordDT_end) = 0" would work...but I just can't seem to >>>> understand why they were not equal. I tried the suggestion below...but it >>>> failed as well. I also tried "If RecordDT>= RecordDT_end"...this >>>> works...but scares me because I don't know why it works and "=" does not. I >>>> think I will just use the datediff approach...but am still curious... >>>> >>>> >>>> Thanks, >>>> >>>> Mark A. Matte > > > > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com _________________________________________________________________ Connect and share in new ways with Windows Live. http://www.windowslive.com/share.html?ocid=TXT_TAGHM_Wave2_sharelife_012008