首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net 4星期二新年的时候

vb.net 4星期二新年的时候
EN

Stack Overflow用户
提问于 2021-12-31 22:02:33
回答 1查看 38关注 0票数 0

我编写了一个支票簿应用程序,该应用程序将本月的第四个星期二存储在SQLite数据库中,当用户写入支票时,当今天的日期大于存储日期时,数据库中将更新新的第四个星期二日期,并加载一个存放SS付款的函数。

在测试过程中,我发现当年份发生变化时,我编写的第一个函数就会失败。

所以我写了第二个函数来处理这些年来的变化。

代码似乎起作用了。我想将测试合并到一个函数中,因为代码似乎不太优雅。我将张贴下面的小测试应用程序代码。这两个功能在一个模块中。

代码语言:javascript
复制
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

端级

这两个函数和我只使用一个函数的测试代码注释掉了

代码语言:javascript
复制
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

终端模块

我的问题是,是否有更好的方法来编写这段代码,所以我只有一个函数??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 22:57:32

下面是一个基于传入日期的下一个月的第四个星期二的函数:

代码语言:javascript
复制
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

注意,函数总是返回下一个月的第四个星期二,它不检查传入的日期是否小于包含传入日期的同月的第四个星期二。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70545905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档