首页 > 解决方案 > vb.net 选项严格将字符串转换为日期

问题描述

我正在尝试将数据库中的字符串转换为具有这种格式“yyyy-Md”的日期类型
字符串以这种格式存储“yyyy-Md”
所以我可以使用这种格式的日期变量执行这段代码“yyyy- Md"
因为 Option Strict 已启用 Visual Studio 2019 版本 16.7.5 不满意

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 或仅使用格式“Md-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

标签: vb.netdate

解决方案


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

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# 转换的残余工件,我们使用“as X”执行强制转换。不要假设转换器总是让所有代码都完美无缺;您几乎总是必须修复它们的输出,特别是如果仅粘贴到程序的某些部分,他们无法看到所有声明的变量(您的代码似乎不包含provider作为变量)


推荐阅读