我目前正在使用以下功能将日期列表中最近的日期返回到日期(今天)。我的问题是,该函数返回最接近的日期,无论它是今天的过去还是未来。如何更改此代码,以便有一个选项可以在今天之后和最近的日期之前返回最近的日期?这让我感到困惑。
非常感谢您的投入。
Function GetNearestDate(ByVal source As IEnumerable(Of DateTime), ByVal target As DateTime) As DateTime
Dim result As DateTime = Nothing
Dim lowestDifference = TimeSpan.MaxValue
For Each _date As DateTime In source
If _date >= target Then
Continue For
End If
Dim difference = target - _date
If difference < lowestDifference Then
lowestDifference = difference
result = _date
End If
Next
Return result
End Function
答案 0 :(得分:2)
似乎这就是你要找的东西。你只需要能够将某些内容传递给函数,以便它知道你想要什么。我选择了一个明确的枚举。我还更新了它以传回可以为空的日期。这应该可以纠正您的时间问题,但您需要考虑返回的空值。
Public Enum DateCompare
LessThanEqualTo
GreaterThanEqualTo
End Enum
Public Function GetNearestDate(ByVal source As IEnumerable(Of DateTime), _
ByVal target As DateTime, _
ByVal dt As DateCompare) As Nullable(Of DateTime)
Dim result As Nullable(Of DateTime) = Nothing
Dim lowestDifference As TimeSpan = TimeSpan.MaxValue
Dim difference As TimeSpan
For Each _date As DateTime In source
If dt = DateCompare.LessThanEqualTo And _date > target Then
Continue For
ElseIf dt = DateCompare.GreaterThanEqualTo And _date < target Then
Continue For
End If
If target > _date Then
difference = target - _date
Else
difference = _date - target
End If
If difference < lowestDifference Then
lowestDifference = difference
result = _date
End If
Next
Return result
End Function
答案 1 :(得分:1)
希望您能将此转换为VB.Net。我们的想法是对日期进行排序,然后找到给定日期的索引,然后集合中的上一个日期和下一个日期分别是过去和将来最接近的日期
在
之后找到最近的日期string findNearestAfter(List<DateTime> ld, DateTime t)
{
ld.Sort();
int index = 0;
for (int i = 0; i < ld.Count; i++ )
{
if (ld[i] == t)
index = i;
}
string nearest = "";
if (index < ld.Count)
nearest = ld[index + 1].ToString();
return nearest;
}
在
之前找到最近的日期string findNearestBefore(List<DateTime> ld, DateTime t)
{
ld.Sort();
int index = 0;
for (int i = 0; i < ld.Count; i++ )
{
if (ld[i] == t)
index = i;
}
string nearest = "";
if (index > 0)
nearest = ld[index - 1].ToString();
return nearest;
}
从上面的图片中选择任意日期,上一个和下一个是最近的日期。请注意日期已排序。例如,选择8月15日,那么最近的未来日期是21,最近的过去日期是12