1

我目前正在使用下面的函数将日期列表中最近的日期返回到日期(今天)。我的问题是,该函数返回最接近的日期,无论它是今天日期的过去还是未来。如何更改此代码,以便可以选择返回今天之后的最近日期和今天之前的最近日期?这让我很困惑。

非常感谢您的意见。

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
4

2 回答 2

2

好像这就是你要找的东西。您只需要能够将某些内容传递给函数,以便它知道您想要什么。为了明确起见,我选择了一个枚举。我还更新了它以传回一个可为空的日期。这应该可以纠正您的时间问题,但您需要考虑 null 返回值。

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
于 2012-09-03T01:59:30.163 回答
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

于 2012-09-03T01:50:07.033 回答