vb.net 选项严格将字符串转换为日期

vb.net option strict on convert string to date

我正在尝试将字符串从数据库转换为格式为“yyyy-M-d”的日期类型
字符串以这种格式存储“yyyy-M-d”
所以我可以用这种格式的日期变量执行这段代码“yyyy-M-d”
因为 Option Strict 是 ON Visual Studio 2019 ver 16.7.5 是 UN-happy

If gvTorF = "False" And varToday > varFTue Then

首先我不确定是否有必要,但我读到的关于比较日期的帖子提出了这个建议
这是我的变量

Dim varToday As Date
Dim varFTue As Date
Dim varStr As String

接下来,我单击一个按钮,使用下面的代码从数据库中获取数据

Public Sub GetDateInfo()
    Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")
        conn.Open()
        Using cmd As SQLiteCommand = New SQLiteCommand($"SELECT * FROM DateInfoTable WHERE DID = '1'", conn)
            Using rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader
                While rdr.Read()
                    varTorF = rdr("ditORf").ToString
                    'varFTue = CDate(rdr("diTESTdate")) 'shows as 10/26/2021
                    'varFTue = Date.ParseExact(varStr, "yyyy-M-d", provider As IFormatProvider, As Date)
                    'Tried line of code above this can NOT format correct 
                    varTESTdate = CType(rdr("diTESTdate"), String) 'shows as 2021-10-26
                End While
                rdr.Close()
            End Using
        End Using
    End Using
End Sub

除了关闭 Option Strict 或仅使用格式“M-d-yyyy”之外 运行 我的测试
varToday > varFTue 似乎有效
问题是我还有哪些其他选项可以将字符串转换为日期?

下面的函数将转换两个字符串 varTESTdate 和 varTodayStr
varTESTdate 来自数据库,varTodayStr 在函数 bothDates
中创建 这是按钮单击事件背后的函数和调用

bothDates(varTESTdate, varTodayStr)

Public Function bothDates(ByVal varTESTdate As String, ByVal varTodayStr As String) As Object
    result1 = Date.ParseExact(varTESTdate, "yyyy-M-d", provider:=Nothing)
    Dim dateToday = Date.Today
    varTodayStr = dateToday.ToString("yyyy-M-d")
    result2 = Date.ParseExact(varTodayStr, "yyyy-M-d", provider:=Nothing)
    Return (result1, result2)
End Function

您似乎已经在代码中进行了转换

Dim d = DateTime.ParseExact("2026-10-26", "yyyy-M-d", Nothing) 'or provide a culture instead of Nothing..

虽然我不确定尾随的“As IFormatProvider, As Date”是干什么用的

    'varFTue = Date.ParseExact(varStr, "yyyy-M-d", provider As IFormatProvider, As Date)
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这是 vb 中此上下文中的语法错误,看起来像是从 C# 转换而来的残余工件,在 C# 中我们使用“as X”执行强制转换。不要假设转换器总是能完美地完成所有代码;您几乎总是必须修复它们的输出,特别是如果只粘贴程序的一部分,它们看不到所有声明的变量(您的代码似乎不包含 provider 作为变量)