shane
shane

Reputation: 461

Find highest DateTime from list of DateTime's

My Question is that, I want to find the highest DateTime from a list of DateTime?

I have one Array suppose string[] btime = new string[100];

In that Array I am storing the Date which is coming from the SQL-Server The SQL Query is [CONVERT(varchar(10),GETDATE(),101)] it is returning the Date in format of MM/dd/yyyy
and then after I am concatenating the Date with my own given Time
i.e .btime[j] = SqlServerDate + " " + 15:20; and so on;

Now, from this given Array I want to find highest Date and Time

So, I have use this logic

string large=""
large=btime[0];

 for (int i = 0; i < j; i++)
 {
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)
    {
        large = btime[i];
    }
}

but I am getting the Error at

if(DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)

The Error is String not recognized as valid DateTime This error is occurring because of my System DateTime Format is yyyy/dd/MM

So Plz any one can help me in solving this problem I don't want to change format of the system

Upvotes: 1

Views: 4791

Answers (6)

shane
shane

Reputation: 461

Thanks to everyone.

I have got some sort of answer:

string large = "";
large = btime[0];
IFormatProvider culture = System.Threading.Thread.CurrentThread.CurrentCulture;

// This Code will convert the System Format in Thread, Not the Actual Format 
// of The System
CultureInfo ciNewFormat = new CultureInfo(CultureInfo.CurrentCulture.ToString());
ciNewFormat.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = ciNewFormat;

for (int i = 0; i < TimeBackupCounter; i++)
{
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0)
    {
        large = btime[i];
    }
}

Upvotes: 0

David Hall
David Hall

Reputation: 33143

You can use the DateTime.ParseExact() method.

CultureProvider provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(btime[i], "MM/dd/yyyy HH:mm", provider);

The second parameter there is the format string. This specifies how your date will be formatted.

Since you are adding a 24 hour time at the end you need the HH:mm (HH says expect a 24 hour time).

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500055

Others have suggested different ways of parsing the DateTime. This seems pointless to me - if you can possibly change the query, just avoid performing the conversion to a string in the first place. The fewer conversions you use, the fewer chances you have for this sort of thing to be a problem.

Change the query so you end up with DateTime values, and then finding the latest one is trivial in LINQ:

DateTime latest = dateTimes.Max();

Upvotes: 6

you, can use DateTime.ParseExact() functionality to do this. Refer the following code part.

CurDate = DateTime.ParseExact(Name3, "yyyyMMddhhmmssffff", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None)

Upvotes: 0

Yet Another Geek
Yet Another Geek

Reputation: 4289

Use the DateTime.ParseExact Method. Example:

CultureProvider provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(btime[i], "yyyy/dd/MM", provider);

Upvotes: 0

Arnaud F.
Arnaud F.

Reputation: 8452

Hum,

// Containing your datetime field
string[] btime = new string[100];

var max = btime.Select(s => DateTime.Parse(s, "MM/dd/yyyy", CultureInfo.InvariantCulture)).Max();

Upvotes: 3

Related Questions