#vb.net
#vb.net
Вопрос:
Я пытаюсь преобразовать строку в дату на vb, но по какой-то причине я получаю следующее сообщение об ошибке.
System.FormatException: 'String was not recognized as a valid DateTime.'
Я получаю дату из элемента управления датой в winform
dim selectedDate as string = dateControl1.text
dim selectedDt as Date = Date.Parse(selectedDate)
но если я помещу то же значение в код вместо получения из DateControl, все в порядке
dim selectedDate as string = "19/01/2021"
dim selectedDt as Date = Date.Parse(selectedDate)
поэтому я пытаюсь выяснить, есть ли какая-либо разница между значением из dateControl1 и при вводе кода, поскольку dateControl1.text должен возвращать одно и то же строковое значение, поэтому я пытаюсь сделать это
dim selectedDate as string = "19/01/2021"
if selectedDate = dateControl1.text then
debug.print ("same")
else
debug.print ("different")
end if
когда я его запускаю, debug печатает «то же самое»
и если я сделаю это
dim selectedDate as string = "19/01/2021"
if selectedDate = dateControl1.text then
debug.print ("same")
else
debug.print ("different")
end if
dim selectedDt as Date = Date.Parse(dateControl1.text)
Я получаю ту же ошибку, хотя в отладке указано «то же самое»
так что я действительно смущен, почему date.parse показывает ошибку, когда я получаю значение из dateControl1.text, и это точно такая же строка
я что-то упустил?
Спасибо за вашу помощь.
С уважением
- Харис —
Комментарии:
1. Каков формат даты / времени текущего CultureInfo? Попробуйте
DateTime.TryParse()
, указав формат синтаксического анализа. Что такое элемент управления датой (элемент управления, предоставляемый какой платформой)? Разве он не предоставляетValue
свойство, которое возвращает объект Date?2. Скорее всего, вы работаете в системе, где стандартным форматом даты является «ММ / дд / гггг», и вы передаете значение, которое может быть интерпретировано только как «дд / ММ / гггг». Вам нужно будет использовать
ParseExact
илиTryParseExact
и указать точный формат или вызватьParse
илиTryParse
и предоставить IFormatProvider, который предоставил соответствующий формат даты. Однако, как было предложено, если вы используете WinForms иDateTimePicker
элемент управления, вам не следует касаться егоText
свойства, а, скорее, использоватьValue
свойство.
Ответ №1:
Вы можете попробовать этот способ, он должен работать:
dim selectedDt as Date = DateTime.ParseExact(dateControl1.text, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Для более безопасного способа сначала необходимо дважды проверить значение текстового поля. с помощью try
Ответ №2:
Какой элемент управления является элементом управления датой? Если это DateTimePicker, вы можете просто получить дату, используя свойство .Value, без необходимости выполнять какое-либо преобразование.
dim selectedDt as Date = dateControl1.Value