Raf*_*ael 1 c# linq asp.net-mvc datetime
我试图比较asp.net中的2个日期时间,但它忽略了毫秒部分.
我试过用linq:
messages.OrderBy(x => x.Date);
Run Code Online (Sandbox Code Playgroud)
并尝试过
messages.OrderBy(x => x.Date).ThenBy(x=>x.Date.Millisecond);
Run Code Online (Sandbox Code Playgroud)
并且还使用排序
messages.Sort((x, y) => DateTime.Compare(x.Date, y.Date));
Run Code Online (Sandbox Code Playgroud)
并尝试使用字符串格式转换日期时间,但它也忽略毫秒.
对象中的datetime字段正确地带有日期时间毫秒.我正在使用Asp.net MVC3与数据库Informix,Oracle和SQL Server.
你在某个地方犯了一个错误,a DateTime在内部存储为数字
时间值以称为刻度线的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);
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
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
Run Code Online (Sandbox Code Playgroud)
清楚地证明正确排序日期时间列表会先放置先前的毫秒数.
亲自尝试:http://rextester.com/HYQIM13679
至于为什么这不适合你,这是不可能回答的,因为你没有提供你如何通过包含DateTime你正在分类的字段的对象列表的详细信息.一种可能性是,你的源数据实际上是一个字符串,你正在使用的一些变种DateTime.Parse/ DateTime.ParseExact并福尔戈指定你想捕捉毫秒一部分,所以他们正在设置为零的每个实例.
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |