vb.net Как мне разобрать строку в DateTime - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть поле для DatePicker с именем PostDateTxt и TextBox для Time с именем thetime в форме VB.net.В настоящее время я читаю значения из формы и сохраняю их в переменных, где fullPostDate содержит значение даты String в формате дд / мм / гггг, а postTime содержит значение времени String в формате чч: мм.Они хранятся в виде строк, поскольку это их формат в текстовых полях, из которых я получаю их значения.

Когда я нажимаю кнопку «Обновить» в форме, я обновляю значения даты и времени дляконкретный элемент в базе данных.Функция, которая вызывается при нажатии кнопки «Обновить»:

Protected Sub UpdateButton_Click(sender As Object, e As EventArgs) Handles UpdateButton.Click
    If Page.IsPostBack Then
        ...
        Dim mypostdate As String = HttpUtility.HtmlEncode(PostDateTxt.Text & " " & theTime.Text)
        ...
        'Split the mypostdate variable into separate String variables for date & time
        Dim postDate As DateTime = HttpUtility.HtmlDecode(fullPostDate)
        ...
    ...
End Sub

Теперь я хочу преобразовать эти значения обратно в объект DateTime, и я пытаюсь проанализировать строки обратно в DateTime сстрока:

Dim postDate As DateTime = HttpUtility.HtmlDecode(fullPostDate

Однако, когда я выполняю свой код, когда выполняется указанная выше строка, я получаю сообщение Exception User-Unhandled, в котором говорится:

System.InvalidCastException: «Преобразование из строки« 03/29/3019 »в тип« Дата »недопустимо»

Почему это так?Как я могу привести значение String к объекту Date?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы пытаетесь привести объект String непосредственно к объекту DateTime, что невозможно сделать напрямую, поскольку они не разделяют иерархию классов, которая позволила бы им это сделать.

Вы должны попытаться выполнить синтаксический анализ строки в объекте DateTime и дать синтаксическому анализатору формат даты для обработки строки.

например. 7/19/19 в en-UK - 5 июля 2019 года, в en-US - 7 мая 2019 года

DateTime.Parse(MyString, MyCultureInfo)

Где ваш MyCultureInfo соответствует формату строки даты, которую вы ожидаете получить. например, * +1008 *

MyCultureInfo = new CultureInfo("en-US")

ref https://docs.microsoft.com/en-us/dotnet/standard/base-types/parsing-datetime

0 голосов
/ 04 апреля 2019

Попробуйте использовать DateTime.ParseExact.Обратите внимание, что пробел является частью строки формата и столицы ММ за месяц.Строчный m обозначает минуты.Я уверен, что это была опечатка, но год 3019 мог быть вне диапазона.: -)

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim dateString As String = "01/12/2019 05:22" '
    Dim d As DateTime = DateTime.ParseExact(dateString, "dd/MM/yyyy hh:mm", CultureInfo.CurrentCulture)
    Debug.Print(d.ToString)
    'Prints 12/1/2019 5:22:00 AM
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...