【问题标题】:VB.NET Make a Date out of just DayVB.NET 让一天中的约会
【发布时间】:2013-07-30 21:44:19
【问题描述】:

我的用户通常会输入一些旅行信息,包括日期和月份,但通常他们只输入日期。例如,他们将输入"TRIP1500/31",其中 31 暗示其在 7 月。行程日期最多可以是过去 7 天或未来 7 天。所以现在我想做的是猜测那一天是什么月份。到目前为止,我有:

Dim diff As Integer = CInt(tripDay) - Date.Now.Day
Select Case diff
    Case 0
        'same day so its probably current month
End Select

我遇到的问题是当前日期和旅行日期每月重叠的其他情况。如果当前日期和行程日期在当前月份,那么它们的最大差异可能是 +/-7 天,但其他情况呢?任何帮助表示赞赏。

【问题讨论】:

  • 所以 +/- 7 天是最大的差异?
  • 我不完全明白你在问什么。您是否在问如何找到当前日期并从中添加或减去 7 天?
  • 如果用户输入的日期不是从今天起 +/-7 天怎么办?您是在进行验证以防止在此 Case 语句之前出现这种情况,还是计划使用此 Case 语句来合并它?
  • 我在问如何猜测一天是几月。在本例中为 31。但它可以是当前计算机日期后 7 天内的任何一天。

标签: vb.net date days


【解决方案1】:
Function GetTripDate(day As Integer) As Date

    Dim today As Date = Date.Today

    For i As Integer = -7 To 7
        Dim dt As Date = today.AddDays(i)
        If dt.Day = day Then Return dt
    Next

    Throw New ArgumentOutOfRangeException("Invalid trip day.")

End Function

【讨论】:

  • 这是一种有趣的方法。让我消化一下逻辑。
  • 我想我喜欢这种简单的方法,而且我还可以调整范围值。非常感谢。
【解决方案2】:

这将为您提供与给定日期最近的日期(包括月份):

Dim maxDiffDays = 7
Dim tripDay = 31
Dim today = Date.Today
Dim tripDate = New Date(today.Year, today.Month, tripDay)
Dim tripDates = {tripDate.AddMonths(-1), tripDate, tripDate.AddMonths(1)}
Array.Sort(Of Date)(tripDates, Function(d1, d2) ((today - d1).Duration).CompareTo((today - d2).Duration))
Dim nearestDate = tripDates.First()
If ((today - nearestDate).Days <= maxDiffDays) Then
    Console.WriteLine("Nearest month for trip date is: " & nearestDate.Month)
End If

它从给定的日期创建一个Date,然后创建该日期之后一个月和之前一个月的两个周围日期。这个数组将从今天的正时间跨度中排序(TimeSpan.Duration)。所以数组中的第一个日期是与正确月份最近的日期。

【讨论】:

  • 让我试试这个并做一些测试。将返回结果
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多