Jamie888 Ответов: 3

Преобразование даты и времени в другой формат


Привет, у меня есть следующие коды в VB. У меня есть переменная в DateTime, и я попытался преобразовать формат возвращаемого значения из базы данных в yyyy-MM-dd HH:mm:ss я попытался преобразовать его в строку, чтобы изменить ее формат, но, похоже, он работает не так, как ожидалось. Ниже приведены мои коды:

Dim woStartDate As DateTime
While readerSQL.Read()
      If Not IsDBNull(readerSQL.Item("WOStartDate")) Then
         woStartDate = readerSQL.Item("WOStartDate") '11/8/2016 1.52 PM
         woStartDate = woStartDate.ToString("yyyy-MM-dd HH:mm:ss") '2016-11-08 13:52:21(expected result)
      Else
         woStartDate = DateTime.Now
      End If
End While



Значение остается в том же исходном формате после преобразования. Я использовал эту функцию много раз(в другой программе), и, похоже, у меня нет никаких проблем с преобразованием.

Что я уже пробовал:

1. Пытался конвертировать readerSQL.Пункт("WOStartDate") в строку напрямую, но возвращает ошибку.

Ralf Meier

Вы уверены, что ваша кодовая часть после IF работает ...?
Я предполагаю, что вы получаете IsDBNull от элемента, и из-за этого ваш код работает в ветке ELSE.
Не могли бы вы проверить и подтвердить (или не подтвердить) это с помощью отладки ...?

При попытке прямого преобразования элемента он возвращает ошибку ... какую ошибку вы получаете и ... каково содержание этого пункта ? Я думаю, что это та же проблема, что и выше ...

Jamie888

Да, сэр, я уже отлаживал свои коды раньше. Она действительно перетекает в часть IF. Значение GETDATE () находится в формате 11/8/2016 1.52 PM. Затем дело доходит до woStartDate.ToString ("yyyy-MM-dd HH:mm:ss") часть для преобразования, но ничего не происходит.

Ralf Meier

см. мое решение (2).

3 Ответов

Рейтинг:
20

Ralf Meier

Извиняюсь... Я неправильно прочитал код.
Попробуйте этот код :

Dim woStartDate As DateTime
dim myStartDate as string
While readerSQL.Read()
      If Not IsDBNull(readerSQL.Item("WOStartDate")) Then
         woStartDate = readerSQL.Item("WOStartDate") '11/8/2016 1.52 PM
         myStartDate = woStartDate.ToString("yyyy-MM-dd HH:mm:ss") '2016-11-08 13:52:21(expected result)
      Else
         myStartDate = DateTime.Now.tostring
      End If
End While


Дата или Дата-Время-это просто это.
Только строка может содержать другое форматирование ...


Jamie888

Благодарю вас, сэр, за информацию. Я сделал это в соответствии с вашим предложением, и теперь он работает нормально. Спасибо еще раз.

Рейтинг:
1

Mohd_Deeb

попробуйте использовать это :

woStartDate  =  DateTime.ParseExact(woStartDate , "MM/dd/yyyy h:mm:ss tt",
           Globalization.CultureInfo.InvariantCulture)


Рейтинг:
0

F-ES Sitecore

Переменная DateTime не имеет формата, она представляет собой точку во времени. Он получает формат только тогда, когда вы преобразуете его в строку. Когда вы просто просите переменную DateTime показать себя в виде строки, она выбирает формат, определенный в Системных настройках ОС, и если вы хотите, чтобы она была в определенном формате, вам нужно предоставить этот формат через ToString. Сама переменная DateTime, хотя и не имеет формата, на самом деле вы видите, когда показываете ее, ее представление по умолчанию.

В принципе, вы не можете дать DateTime формат, вы не можете дать датам в SQL формат, вы только даете датам формат, когда вы преобразуете их в строку, поэтому оставьте их такими, какие они есть, и преобразуйте их, когда вам нужно их отобразить.


Ralf Meier

Очень хорошо описано ... но вы уже посмотрели на мое решение ?..

Jamie888

- Да, сэр. Спасибо за объяснение. Это прояснило мое замешательство. Я изучил решение г-на Мейера(решение 2) и модифицировал его в соответствии с моей потребностью. Сейчас это работает.