代码之家  ›  专栏  ›  技术社区  ›  Vector

vb。新年的第四个星期二

  •  0
  • Vector  · 技术社区  · 3 年前

    我已经编写了一个支票簿应用程序,它将每月的第四个星期二存储在SQLite数据库中,当用户写支票并且今天的日期大于存储的日期时,DB中会更新一个新的第四个星期二日期,并加载一个存放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
    

    端模块

    我的问题是,有没有更好的方法来编写这段代码,这样我就只有一个函数了?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Idle_Mind    3 年前

    下面是一个函数,它根据传入的日期查找下个月的第四个星期二:

    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