我编写了一个支票簿应用程序,该应用程序将本月的第四个星期二存储在SQLite数据库中,当用户写入支票时,当今天的日期大于存储日期时,数据库中将更新新的第四个星期二日期,并加载一个存放SS付款的函数。
在测试过程中,我发现当年份发生变化时,我编写的第一个函数就会失败。
所以我写了第二个函数来处理这些年来的变化。
代码似乎起作用了。我想将测试合并到一个函数中,因为代码似乎不太优雅。我将张贴下面的小测试应用程序代码。这两个功能在一个模块中。
Public Class frmStart
Dim varSearchDate As Date
Dim varFTue As Date
Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
tbBox1.Text = "2021-12-28" ' 2021-11-23 2021-12-28 TEST DATES
End Sub
Private Sub btnADD_Click(sender As Object, e As EventArgs) Handles btnADD.Click
varSearchDate = CDate(tbBox1.Text)
tbAns.Text = varSearchDate.ToString("M-d-yyyy")
Dim dateToday = Date.Today
Dim mo As String
mo = varSearchDate.ToString("MM")
If dateToday > varSearchDate And CInt(mo) <> 12 Then
varFTue = CDate(FourthTueOfNextMonth(Date.Today).ToString("yyyy-M-d"))
MsgBox("varFTue Next Mo " & varFTue)
tbBox2.Text = varFTue.ToString("yyyy-M-d")
'WriteNewFourthTue()
'gvTxType = "SS Deposit"
ElseIf dateToday > varSearchDate And CInt(mo) = 12 Then
varFTue = CDate(FourthTueOfNewYear(Date.Today).ToString("yyyy-M-d"))
MsgBox("varFTue New Yr " & varFTue)
tbBox3.Text = varFTue.ToString("yyyy-M-d")
'WriteNewFourthTue()
'gvTxType = "SS Deposit"
End If
End Sub端级
这两个函数和我只使用一个函数的测试代码注释掉了
Module FunctionModule
'Function FourthTueOfNextMonth(dt As Date) As Date
' Dim currDate = New Date(dt.Year, dt.Month, 1)
' Dim nTuesday As Integer
' While nTuesday < 4
' If currDate.DayOfWeek = DayOfWeek.Tuesday Then
' nTuesday += 1
' End If
' currDate = currDate.AddDays(1)
' End While
' If dt.Month <> 12 Then
' Return New Date(dt.Year, dt.Month, currDate.Day - 1)
' ElseIf dt.Month = 12 Then
' Return New Date(dt.Year + 1, dt.Month - 11, currDate.Day - 1)
' End If
'End Function
Function FourthTueOfNextMonth(dt As Date) As Date
Dim currDate = New Date(dt.Year, dt.Month, 1)
Dim nTuesday As Integer
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
Function FourthTueOfNewYear(dt As Date) As Date
Dim currDate = New Date(dt.Year + 1, dt.Month - 11, 1)
Dim nTuesday As Integer
While nTuesday < 4
If currDate.DayOfWeek = DayOfWeek.Tuesday Then
nTuesday += 1
End If
currDate = currDate.AddDays(1)
End While
Return New Date(dt.Year + 1, dt.Month - 11, currDate.Day - 1)
End Function终端模块
我的问题是,是否有更好的方法来编写这段代码,所以我只有一个函数??
发布于 2021-12-31 22:57:32
下面是一个基于传入日期的下一个月的第四个星期二的函数:
Function FourthTueOfNextMonth(dt As Date) As Date
' Start with the First Day of the Month, from the date passed in.
' Add one Month to that to get the first Day of the NEXT month.
Dim currDate As Date = (New Date(dt.Year, dt.Month, 1)).AddMonths(1)
' Find the First Tuesday of the Month
While currDate.DayOfWeek <> DayOfWeek.Tuesday
currDate = currDate.AddDays(1)
End While
' Add three more Weeks to jump to Fourth Tuesday
Return currDate.AddDays(21)
End Function注意,函数总是返回下一个月的第四个星期二,它不检查传入的日期是否小于包含传入日期的同月的第四个星期二。
https://stackoverflow.com/questions/70545905
复制相似问题