Найти самый высокий DateTime из списка DateTime's - PullRequest
1 голос
/ 25 апреля 2011

Мой вопрос заключается в том, что я хочу найти самый высокий DateTime из списка DateTime?

У меня есть один массив, предположим, string[] btime = new string[100];

В этом массиве я храню дату, поступающую с SQL-сервера SQL-запрос [CONVERT(varchar(10),GETDATE(),101)] возвращает дату в формате ММ / дд / гггг
и затем после того, как я соединяю дату с моим собственным временем
то есть .btime[j] = SqlServerDate + " " + 15:20; и т. д .;

Теперь из данного массива я хочу найти самые высокие дату и время

Итак, я должен использовать эту логику

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];
    }
}

но я получаю сообщение об ошибке на

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

Ошибка: Строка не распознана как действительная дата / время Эта ошибка возникает из-за того, что мой системный формат даты и времени имеет значение гггг / дд / мм

Так что плз любой может помочь мне в решении этой проблемы Я не хочу менять формат системы

Ответы [ 6 ]

6 голосов
/ 25 апреля 2011

Другие предложили разные способы разбора DateTime. Это кажется мне бессмысленным - если вы можете изменить запрос, просто избегайте преобразования в строку. Чем меньше конверсий вы используете, тем меньше у вас шансов, что подобные вещи станут проблемой.

Измените запрос так, чтобы в итоге вы получили DateTime значения, а затем найти последний из них тривиально в LINQ:

DateTime latest = dateTimes.Max();
3 голосов
/ 25 апреля 2011

Hum

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

var max = btime.Select(s => DateTime.Parse(s, "MM/dd/yyyy", CultureInfo.InvariantCulture)).Max();
0 голосов
/ 26 апреля 2011

Спасибо всем.

У меня есть какой-то ответ:

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];
    }
}
0 голосов
/ 25 апреля 2011

Вы можете использовать метод DateTime.ParseExact () .

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

Вторым параметром является строка формата.Здесь указывается, как будет форматироваться ваша дата.

Так как вы добавляете 24-часовой формат времени в конце, вам нужен HH: мм (HH говорит, что вы ожидаете 24-часовой формат времени).

0 голосов
/ 25 апреля 2011

вы можете использовать DateTime.ParseExact() функциональность для этого.См. Следующую часть кода.

CurDate = DateTime.ParseExact(Name3, "yyyyMMddhhmmssffff", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None)
0 голосов
/ 25 апреля 2011

Используйте метод DateTime.ParseExact . Пример:

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