VB.Net 以日期格式查找月份的最后一天

VB.Net find last day of month with date format

我正在尝试查找该月的最后一天并将其与今天的日期进行比较
我不想要整数我想要这种格式的结果“MM-dd-yyyy”
日期选择器不适用于此项目
这是我使用的代码,但这个过程似乎过于复杂编造字符串
旁注,当今天是第 4 个星期二之后,我将 True 和本月的最后一天写入 DB
当今天是本月的最后一天之后并且 bool 现在是 True 我将新月份的新最后一天和 false 写入 DB

    Function FourthTueOfMonth(dt As Date) As Date
    Dim currDate = New Date(dt.Year, dt.Month, 1)
    Dim nTuesday = 0

    While nTuesday < 4
        If currDate.DayOfWeek = DayOfWeek.Tuesday Then
            nTuesday += 1
        End If
        currDate = currDate.AddDays(1)
    End While

    Return New Date(dt.Year, dt.Month, currDate.Day - 1)

End Function
   Private Sub btnFindDate_Click(sender As Object, e As EventArgs) Handles btnFindDate.Click

    Dim tORf As Boolean = False
    Dim dateToday = Date.Today
    Dim dateFourthTue = (FourthTueOfMonth(Date.Today))

    tbFourthTue.Text = dateFourthTue.ToString("MMM-dd-yyyy")
    tbThree.Text = dateFourthTue.ToString("yyyy-MM-dd")

    tbEndOFMonth.Text = Date.DaysInMonth(Date.Now.Year, Date.Now.AddMonths(0).Month).ToString

    Dim dToday As Date
    dToday = Date.Parse("10-01-2021")
    Dim dtY = dateToday.ToString("yyyy")
    Dim dtM = dateToday.ToString("MM")
    Dim eom As String = Date.DaysInMonth(Date.Now.Year, Date.Now.AddMonths(0).Month).ToString
    Dim dtALL As String
    dtALL = dtM & "-" & eom & "-" + dtY
    Dim testD As Date
    testD = Date.Parse(dtALL)

    If tORf = False And dToday > dateFourthTue Then
        MessageBox.Show("Today > Fourth Tue")
        'tORf = True'Write True
        'tbMessage.Text = tORf.ToString
    End If

    If tORf = True And dToday > testD Then
        MessageBox.Show("Today > End Of Last Month")
        'tORf = False write False
        'tbMessage.Text = tORf.ToString
    End If
    End Sub

我不想承认我可能太快放弃了搜索
在这里找到答案

这是代码

    Dim dateToday = Date.Now.AddMonths(0)
    Dim dateEndOfMonth = New Date(dateToday.Year, dateToday.Month, DateTime.DaysInMonth(dateToday.Year, dateToday.Month))
    tbMsg.Text = dateEndOfMonth.ToString("MM-dd-yyyy")

代码似乎有效?
我看到了使用这种格式比较日期的建议
测试日期使用此格式 yyyyMMdd 如果您可以添加到答案中请发表评论

几件事:

您想使用今天 - 而不是“now()”,因为它包含时间部分。虽然日期类型只有日期,但您应该考虑是否有日期时间,无论哪种方式,都不需要像现在这样引入和使用包含日期和时间的值。

我推荐这段代码:

    Dim dtToday As Date = Date.Today

    Dim dtEndOfMonth As Date = DateSerial(dtToday.Year, dtToday.Month + 1, 0)

    Debug.Print(dtToday)
    Debug.Print(dtEndOfMonth)

输出: 今天恰好是 1 号,但任何日期都可以。这包括年末,甚至闰年。

2021-10-01
2021-10-31

所以,这是一个古老的技巧 - 可以追溯到旧的 VB6,甚至是 20 年前的旧 VBA 代码。

因此,我们使用日期序列来生成日期,但是如果您使用 0 表示日期,那么您得到的是前一天,从而得到当月的最后一天。

所以我们将年、月 + 1 和 0 作为日期 - 结果是当月的最后一天。

@Albert D. Kallal 提供的解决方案非常适合 Visual Basic,因为 DateSerial 位于 DateAndTime class 的 Visual Basic 命名空间中。这是一个应该适用于 vb 和 C# 的解决方案。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dtToday As Date = Date.Today

    Dim dtEndOfMonth = New Date(dtToday.Year, dtToday.Month + 1, 1).AddDays(-1)

    Debug.Print(dtToday.ToString)
    Debug.Print(dtEndOfMonth.ToString("MM-dd-yyyy"))
End Sub