vb.net опция строгая при преобразовании строки в дату

#vb.net #date

Вопрос:

Я пытаюсь преобразовать строку из базы данных в тип даты в этом формате «гггг-М-д».
Строка хранится в этом формате «гггг-М-д»
, поэтому я могу выполнить этот код с переменными даты в этом формате «гггг-М-д»
, потому что опция 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
 

Кроме отключения опции Строгий или просто используйте формат «M-d-гггг» для запуска моего теста
Где varToday > varFTue, который, кажется, работает
Вопрос в том, каковы мои другие варианты преобразования строки в дату?

Функция ниже преобразует две строки varTESTdate и varTodayStr
varTESTdate берется из базы данных, а varTodayStr создается в функции.
Здесь указана функция и вызов, выполненный за событием нажатия кнопки

 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
 

Комментарии:

1. @HansPassant это хорошо, но слово поставщик отображается красным цветом, когда я преобразую его в vb.net и я не уверен, как исправить то, что intelisense не предлагает полезных предложений, никаких идей ? мой синтаксический анализ сделал то же самое

2. @HansPassant преобразовал код в vb.net но «результат» выглядит так, как будто это дата, для ее просмотра мне пришлось использовать результат. toString, чтобы поместить его в текстовое поле, будет продолжать тестирование, спасибо

3. Если бы я наткнулся на ваш код профессионально, меня бы смутили имена переменных, как сейчас. varTorF и varStr загадочны. Используйте реальные слова, чтобы описать, что это такое. Например testDateString , когда это строка и testDate когда это свидание.

4. Метод сравнения дат является date1.CompareTo(date2) и будет возвращать целое число, отрицательное, 0 или равное, указывающее, является ли date1 >, =, >

5. @djv удобнее просто сравнивать дату и время, как если бы они были числами If startTime > endTime Then throw new Exception("You have your dates the wrong way round") — не используйте compareto, чтобы превратить две даты в одно число, которое вы затем сравниваете с другим числом, чтобы решить, что делать..

Ответ №1:

Похоже, у вас уже есть преобразование в вашем коде

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

Хотя я не уверен, для чего нужен трейлинг «Как IFormatProvider, как дата»

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

Это синтаксическая ошибка в данном контексте в vb и выглядит как остаточный артефакт преобразования из C#, где мы используем «как X» для выполнения приведений. Не думайте, что преобразователи постоянно совершенствуют весь код; вам почти всегда приходится исправлять их вывод, особенно если вы вставляете только те части программы, где они не могут видеть все объявленные переменные (ваш код, похоже, не содержит provider в качестве переменной).

Комментарии:

1. Я получил код для работы с этим поставщиком формата Dim, как IFormatProvider = Ничего result1 = Дата-время. Синтаксический анализ(dateString1, формат, поставщик) varFTue = результат 1 tbDateTwo. Текст = результат 1. Строка(«гггг-М-д») Я проверяю, как это работает, но в настоящее время просто использование этого формата, похоже, работает 10/8/2021 > 10/26/2021 не уверен, почему рекомендация использовать «гггг-М-д» ? ? Спасибо

2. В самых первых строках вашего вопроса сказано, что вы храните даты в формате гггг-М-д; вот почему я использовал этот формат в своей рекомендации. Вы можете изменить его соответствующим образом