你犯了一个错误的地方,一个DateTime
在内部存储为数字
时间值被称为蜱100毫微秒为单位,并在特定日期是自12蜱数量: 00午夜,1月1日,公元0001(CE)在GregorianCalendar的日历 (source)
排序时使用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
,并忘记指定您希望捕获毫秒部分,因此它们对于每个实例都被设置为零。
请提供一个工作示例来说明这一点。我无法复制它。 –
你确定吗?关于比较日期的其他问题关于比较忽略毫秒 – ChrisF
'messages.OrderBy(x => x.Ticks);'工作吗?我怀疑你可能没有比较你认为你在比较什么。 – dash