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
我正在尝试查找该月的最后一天并将其与今天的日期进行比较
我不想要整数我想要这种格式的结果“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