你在某处犯了一个错误,aDateTime
在内部存储为一个数字
时间值以 100 纳秒为单位,称为滴答声,特定日期是公历中自 0001 年 1 月 1 日午夜 12:00 开始的滴答声(来源)
当您使用 a 进行排序时DateTime
,它只是使用此基础值进行整数排序。因此,如果您的DateTime
实例有关于毫秒数的信息,它将被包含在排序中。这可以使用以下代码进行演示:
var dates = new[]{
new DateTime(2013,1,31,12,0,0,10),
new DateTime(2013,1,31,12,0,0,20),
new DateTime(2013,1,31,12,0,0,5)
};
foreach(var date in dates)
{
Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff}", date);
}
Console.WriteLine("-------------");
foreach(var date in dates.OrderBy(dt => dt))
{
Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff}", date);
}
这给出了输出:
2013-01-31 12:00:00.010
2013-01-31 12:00:00.020
2013-01-31 12:00:00.005
-------------
2013-01-31 12:00:00.005
2013-01-31 12:00:00.010
2013-01-31 12:00:00.020
清楚地证明对日期时间列表进行正确排序会将较早的毫秒数放在首位。
自己试试吧:http ://rextester.com/HYQIM13679
至于为什么这不会发生在您身上,那是不可能回答的,因为您没有提供有关您如何通过包含DateTime
您正在排序的字段的对象列表的对象列表的详细信息。一种可能性是您的源数据实际上是一个字符串,并且您正在使用DateTime.Parse
/的某些变体DateTime.ParseExact
并且忘记指定您希望捕获毫秒部分,因此它们对于每个实例都设置为零。