2013-01-31 71 views
1

我想比较在asp.net中的2个日期时间,但它忽略了毫秒部分。比较日期时间和毫秒精度

我尝试使用LINQ:

messages.OrderBy(x => x.Date); 

,并试图

messages.OrderBy(x => x.Date).ThenBy(x=>x.Date.Millisecond); 

,并使用排序

messages.Sort((x, y) => DateTime.Compare(x.Date, y.Date)); 

,并试图转换的日期时间用字符串格式,但它也忽略毫秒。

对象中的日期时间字段正确地使日期时间以毫秒为单位。 我使用Asp.net MVC3与数据库Informix,Oracle和SQL Server。

+0

请提供一个工作示例来说明这一点。我无法复制它。 –

+0

你确定吗?关于比较日期的其他问题关于比较忽略毫秒 – ChrisF

+0

'messages.OrderBy(x => x.Ticks);'工作吗?我怀疑你可能没有比较你认为你在比较什么。 – dash

回答

5

你犯了一个错误的地方,一个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,并忘记指定您希望捕获毫秒部分,因此它们对于每个实例都被设置为零。

+0

我在这里做了深入的搜索,发现这是一个返回millis“000”的Web服务。感谢帮助的人 – Rafael