vb.net преобразование строки в формат даты

#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

Дата-время.Метод ParseExact

Ответ №2:

Какой элемент управления является элементом управления датой? Если это DateTimePicker, вы можете просто получить дату, используя свойство .Value, без необходимости выполнять какое-либо преобразование.

 dim selectedDt as Date = dateControl1.Value