C#排序日期时间问题

本文关键字:问题 时间 日期 排序 | 更新日期: 2023-09-27 18:26:27

我正在设置一个日期时间列表:

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

C#排序日期时间问题

您省略了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的值实际上是20123/2,这就是为什么它是最后一个。

您不想来回转换。只做一次。先对列表进行排序,然后再转换为字符串。

转换为字符串并转换回字符串可能会导致这种结果。你为什么不直接把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);

输出:

2012年3月1日凌晨1:38:00

2012年3月1日上午5:33

2012年3月1日上午10:56:00

2012年3月1日下午5:03:00

按任意键继续。

只有在所有日期都相同的情况下,上面才会起作用,如果日期也不同,您应该执行以下操作。。。

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

否则不想使用,或者不知道林克,那么你可以去下面。。

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