gpt4 book ai didi

c# - 比较具有毫秒精度的日期时间

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:17 26 4
gpt4 key购买 nike

我正在尝试比较 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 一起使用。

最佳答案

你在某处犯了一个错误,DateTime 在内部存储为一个数字

Time values are measured in 100-nanosecond units called ticks, and a particular date is the number of ticks since 12:00 midnight, January 1, 0001 A.D. (C.E.) in the GregorianCalendar calendar (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 的某些变体并且忘记指定您希望捕获毫秒部分,因此每个实例都将它们设置为零。

关于c# - 比较具有毫秒精度的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com