Comparing Dates

  • Thread starter Thread starter matthias s.
  • Start date Start date
M

matthias s.

Hi there,

I'm surely not the first one to have this problem. But searching the group
didn't yield any results, so here goes:

When storing DateTime values in an SQL Database (using a 'datetime' field),
the value returned by a subsequent query never exactly matches the DateTime
values inserted (I guess the DateTime struct has a different precision then
what is acutally saved to the DB), thus the following always fails:

DateTime dtNow = DateTime.Now;

// save dtNow to a SQL Database
....
// load it again into a variable called dtLoadedDateTime
....
if (dtLoadedDateTime == dtNow) {
// we never get here, cause the ticks are different
}

My question is, are there any utility classes which provide methods to
compare dates (up to a given precision)? I'm looking for methods like...

bool EqualToSecond(DateTime dtFirst, DateTime dtSecond){}

.... which should return true if the Dates equal up to a seconds precision. A
different number of ticks should be ignored (until there is so many of them
that the Seconds are affected).

If they don't exist, what would be the most effective way of writing them
(using the datetimes Hour, Minute, Second properties? using a TimeSpan?)

Any suggestions on this issue are very welcome. Thanks in advance!

/matthias
 
Matthias,

Have you used the SqlDateTime structure? You can take your dtNow value,
pass it to the constructor of the SqlDateTime structure, and then store that
in the database. When you get the value back later for comparison, you
should be able to compare the values correctly.

If this is an isolated case, then this will work, but if you use this
kind of logic everywhere, you are going to have to rethink your strategy for
date storage/manipulation.

Hope this helps.
 
Hi Nicholas,

thanks a bunch, I'll look into it.

/matthias

Nicholas Paldino said:
Matthias,

Have you used the SqlDateTime structure? You can take your dtNow value,
pass it to the constructor of the SqlDateTime structure, and then store that
in the database. When you get the value back later for comparison, you
should be able to compare the values correctly.

If this is an isolated case, then this will work, but if you use this
kind of logic everywhere, you are going to have to rethink your strategy for
date storage/manipulation.

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

matthias s. said:
Hi there,

I'm surely not the first one to have this problem. But searching the group
didn't yield any results, so here goes:

When storing DateTime values in an SQL Database (using a 'datetime'
field),
the value returned by a subsequent query never exactly matches the
DateTime
values inserted (I guess the DateTime struct has a different precision
then
what is acutally saved to the DB), thus the following always fails:

DateTime dtNow = DateTime.Now;

// save dtNow to a SQL Database
...
// load it again into a variable called dtLoadedDateTime
...
if (dtLoadedDateTime == dtNow) {
// we never get here, cause the ticks are different
}

My question is, are there any utility classes which provide methods to
compare dates (up to a given precision)? I'm looking for methods like...

bool EqualToSecond(DateTime dtFirst, DateTime dtSecond){}

... which should return true if the Dates equal up to a seconds precision.
A
different number of ticks should be ignored (until there is so many of
them
that the Seconds are affected).

If they don't exist, what would be the most effective way of writing them
(using the datetimes Hour, Minute, Second properties? using a TimeSpan?)

Any suggestions on this issue are very welcome. Thanks in advance!

/matthias
 
Back
Top