C# 如何确定最近的日期

C# 如何确定最近的日期,c#,.net,sql,sql-server,razor,C#,.net,Sql,Sql Server,Razor,我有点困惑,如何或什么是确定最接近日期的最佳方法 在我的表中,所有内容都需要加时间戳。在一个页面上,我需要能够从表中检索所有内容,只要日期是最接近现在的日期 我该怎么办 我使用的是DateTime。现在将日期插入数据库时,格式如下: 5/07/2011 5:28:57 PM 你是否只有过去的日期,也就是说,你是否会有一个比DateTime.Now新的日期?如果没有,您可以通过在日期列上选择最新日期的一个简单的orderby。否则,您需要获得DateTime.Now之间的日期差,然后根据该结果排

我有点困惑,如何或什么是确定最接近日期的最佳方法

在我的表中,所有内容都需要加时间戳。在一个页面上,我需要能够从表中检索所有内容,只要日期是最接近现在的日期

我该怎么办

我使用的是
DateTime。现在
将日期插入数据库时,格式如下:

5/07/2011 5:28:57 PM

你是否只有过去的日期,也就是说,你是否会有一个比
DateTime.Now
新的日期?如果没有,您可以通过在日期列上选择最新日期的一个简单的
orderby
。否则,您需要获得
DateTime.Now
之间的日期差,然后根据该结果排序。e、 g

SELECT TOP 1
   columnDate
FROM table1
ORDER BY DATEDIFF (ss,@passedInDate,columnDate)
这将使用@PassedDate(DateTime.Now)作为限定符或基准日期来查找所有未来和过去的日期。在我的示例中,我使用秒作为时间间隔进行比较,但是您可以将其更改为对您最有意义的时间间隔

另外,您不需要传入
DateTime.Now
到SQL server,因为您可以使用内置的
GetDate()
函数。

怎么样

SELECT TOP 1 *
FROM MyTable
ORDER BY TimestampColumn DESC
考虑将时间存储在UTC-
DateTime.UtcNow

以下是我的建议:

declare @DateTimeNow datetime = getdate()

select TOP (1)
     RecordId
    ,MyDateColumn
    ,abs(datediff(s, MyDateColumn, @DateTimeNow)) as Diff
from 
    MyTable
order by 
    abs(datediff(s, MyDateColumn, @DateTimeNow)) asc

不要忘记使用ABS()

在T-SQL中,您可以使用DateDiff:

DATEDIFF ( datepart , startdate , enddate )

或者在C#中,您可以使用TimeSpan:


类似的方法应该会奏效:

SELECT TOP 1 * FROM MyTable ORDER BY ABS(DATEDIFF(DD, getdate(), DATE))

这将按最近的日期、过去或将来对行进行排序。如果您需要比天更精确的数据,请按规定将DD更改为其他数据

如果表中将来有一些项目,该怎么办?(这个问题不清楚是否有可能。)谢谢@Jakub K,非常感谢:)@svick-words
timestamp
DateTime。现在
是一个很好的线索;-)@Jerry-因为在一些永远不会发生的事情上浪费CPU周期是没有意义的。YAGNI.Adding ABS()将允许您根据任何日期包括页面内容的查询,而不仅仅是当前日期(现在),尽管它仍然支持现在刚刚好。我还想添加一个注意事项,您不能在这个测试中真正使用“ss”(毫秒),因为您可能会出现溢出。你应该使用“s”(秒)来防止这种情况。首先,
ss
不能用单引号括起来。其次,这将返回过去最远的日期,而不是最接近当前日期的日期,因为
DATEDIFF
将为它们返回巨大的负数。嗯,我很慢,但第二个问题仍然存在。这不是毫秒,
ss
秒的缩写。”“最接近”表示四舍五入,即第二天晚上11点。这不是惯例,通常我们会截断时间戳来查找日期。是的!我知道我忘了一个更好的词来表达我的想法。你的建议没有达到最接近的程度,只是分类而已。添加TOP1。