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