Сортировка даты и времени в C # - PullRequest
0 голосов
/ 02 марта 2012

Я настраиваю список дат:

DateTime a1
DateTime a2
DateTime a3
DateTime a4

Вышеуказанное выглядит так (как объекты DateTime):

3/1/2012 10:56
3/1/2012 17:03
3/1/2012 1:38
3/1/2012 5:33

Затем я помещаю их в список и сортирую:

List<DateTime> ldtBites = new List<DateTime>();
ldtBites.Add(a1);
ldtBites.Add(a2);
ldtBites.Add(a3);
ldtBites.Add(a4);
ldtBites.Sort();

После сортировки я получаю это:

3/1/2012 1:38:00 AM
3/1/2012 10:56 AM
3/1/2012 5:03:00 PM
3/1/2012 5:33:00 AM

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

Вы опустили определение w, x, y, z. Я определил их так:

DateTime w = new DateTime(2012, 3, 1, 10, 56, 0);
DateTime x = new DateTime(2012, 3, 1, 17, 3, 0);
DateTime y = new DateTime(2012, 3, 1, 1, 38, 0);
DateTime z = new DateTime(2012, 2, 29, 17, 3, 0);

Это заставляет их соответствовать вашим значениям для a1-a4; однако, когда я запускаю остальную часть вашего кода, они сортируются правильно (a3, a4, a1, a2).

Однако я заметил, что x и z были одинаковыми часами / минутами, поэтому мой первоначальный тест имел следующее значение:

DateTime z = new DateTime(2012, 3, 1, 17, 3, 0);

Когда я запустил это, я заставил их выйти в том порядке, в котором вы показывали (a3, a1, a2, a4); однако после вызова AddHours() значение z было фактически 3/2/2012 , поэтому оно было последним.

0 голосов
/ 06 декабря 2013

Выше будет работать, только если все даты одинаковы, в случае, если дата также отличается, вы должны сделать следующее ...

var sortedDates = dates.OrderByDescending(x => x);

или не хотите использовать, или нене знаю Linq, тогда вы можете перейти к следующему ..

static List SortAscending(List list)
{
list.Sort((a, b) => a.CompareTo(b));
return list;
}

static List SortDescending(List list)
{
list.Sort((a, b) => b.CompareTo(a));
return list;
}
0 голосов
/ 03 марта 2012

Вы не хотите конвертировать туда и обратно.Просто сделай это один раз.Сначала сортируйте свой список, а затем конвертируйте в строку.

0 голосов
/ 02 марта 2012

Преобразование в строку и обратное преобразование может привести к такому результату.Почему бы вам не добавить x, y, w, z в ваш список напрямую?

List<DateTime> ldtBites = new List<DateTime>();
ldtBites.Add(DateTime.Parse("3/1/2012 10:56"));
ldtBites.Add(DateTime.Parse("3/1/2012 17:03"));
ldtBites.Add(DateTime.Parse("3/1/2012 1:38"));
ldtBites.Add(DateTime.Parse("3/1/2012 5:33"));
ldtBites.Sort();

foreach (DateTime dt in ldtBites)
    Console.WriteLine(dt);

Вывод:

3/1/2012 1:38:00 AM

3/1/2012 5:33:00 AM

3/1/2012 10:56:00

3/1/2012 17:03:00

Нажмите любую клавишу для продолжения.,.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...