Reputation: 1591
I want to compare between two dates.
From both the dates, I am fetching only date component using ToShortDateString()
, as shown below. Now the problem is when I'm comparing the two dates. Its throwing error --
"Operator >= can't be applied to operands of type string and string."
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
(DateTime.Now.ToShortDateString() >= srtdate.ToShortDateString())
I need to compare date component only, NOT date and time together.
Please suggest what is the alternative way. Thanks
To JON:-
(I went tyhrough all what you explained and understood hopefully what the point actually you trying to make. Just to clarify more and make a last check I ll show an example.) I have an web interface, where I give a start date and end date for a XYZ name (Note I can enter only date here, not time).
Start Date - 22-Feb-2012 AND End Date - 22-Feb-2012
Now in back end (code), if Start date and End date is same as Current date OR current date is in between start and end date, I want a ACTIVE flag set or else not. I give the condition as this:-
if ((DateTime.Today >= strdate.Date) && (DateTime.Today <= enddate.Date))
lblCondition.Text = "CHECKED";
Now when I debug the code,
Both DateTime.Today and strdate.Date gives the value as 2/22/2012 12:00:00 AM.
So, Jon my question is:- Would 'today' and 'date' work as per mentioned requirement, where only date component used. I hope it would.
Thanks a lot for all your explanantion before.
Upvotes: 4
Views: 22419
Reputation: 2501
hope this helps you.
using System;
public class Example
{
public static void Main()
{
DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;
if (result < 0)
relationship = "is earlier than";
else if (result == 0)
relationship = "is the same time as";
else
relationship = "is later than";
Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
}
}
// The example displays the following output:
// 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM
Upvotes: 0
Reputation: 15663
DateTime.Today >= strdate.Date
some thoughts
Think at the the following example: you need to compare the following numbers 1.5 and 2.5. These are represented in .Net as decimal, double or float, but let's use decimal. The greater one is 2.5
Let's say you need to compare the integral part of these numbers (1. and 2.). You will still use the decimal type to do the comparison.
Math.Truncate(x) ? Math.Truncate(y) // x = 1.5, y = 2.5
Same as for the DateTime. DateTime.Date
will return the "integral" part of your date as Math.Truncate returns the integral part of a "real" number, but both will base on their original type.
Upvotes: 3
Reputation: 1499800
Why are you converting to a string representation at all? If you only want to compare the date parts to two DateTime
values, just use the Date
property on each of them:
if (x.Date >= y.Date)
And the Today
property is equivalent to DateTime.Now.Date
.
Both Date
and Today
strip off the time part, leaving a time of midnight. It's not ideal that you've still got a type which is capable of representing times, but that's just the way the DateTime
API works :(
Note that you should usually avoid using DateTime.Now
or DateTime.Today
in web applications unless you're really comfortable with it using the system default time zone as the day boundary. The user's idea of "today" may not be the same as the server's.
You should avoid using string conversions unless your goal is really to get a text representation.
Of course another alternative would be to use the date/time library I'm building, Noda Time, where you could use a LocalDate
type - obviously that makes it clearer that you're only interested in the date and not the time.
EDIT: As the OP seems unconvinced that Date
really does ignore the time component, here's an example:
using System;
public class Test
{
static void Main()
{
// Two DateTime values with different times but
// on the same date
DateTime early = new DateTime(2012, 2, 22, 6, 0, 0);
DateTime late = new DateTime(2012, 2, 22, 18, 0, 0);
Console.WriteLine(early == late); // False
Console.WriteLine(early.Date == late.Date); // True
}
}
Upvotes: 8