Suresh Behera

The Microsoft .Net Junkies

News

Blogroll

Reading

DataTable filter on DateTime coloum

I was surprise to know that 'DateTime.Parse' does not parse fractions of a second and this was messing up our Dataview filter.Here is nice tips from furum.

The Select expression you are using uses DateTime.Parse internally.

DateTime.Parse does not parse fractions of a second, even if you were to include them in your expression. 

I can't see DateTime.Parse ever being changed for backwards compatibility reasons.  You basically have two solutions.

1. Truncate the DateTime to an exact second before inserting in your DataTable, e.g.:



locTimeVariable = TruncateToSecond(System.DateTime.Now.AddDays(i));

 

There are a number of ways you could implement the "TruncateToSecond" helper method.  Here are two - you might like to test to see which is fastest:



static DateTime TruncateToSecond(DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Kind);
}

 

static DateTime TruncateToSecond(DateTime dateTime)
{
   
return new DateTime((dateTime.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond, dateTime.Kind );
}

 

2. Alternatively you could specify a range of times from N to N + 1 second, for example:



"MyColumn>=#" + locTimeVariable.ToString(DateTimeFormatInfo.InvariantInfo) +
"# AND MyColumn<" + locTimeVariable.AddSeconds(1).ToString(DateTimeFormatInfo.InvariantInfo) + "#";

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=356919&SiteID=1

Thanks,

Suresh Behera
 

 

Comments

No Comments