У меня были проблемы с работой с датами. Мне нужен экземпляр DateTime в формате "дд-мм-гггг". Я НЕ прошу иметь строку моего экземпляра даты в "дд-мм-гггг", которую я знаю.
Мне нужно посеять мой объект даты через структуру Entity, которая вызывает хранимую процедуру, которая получает параметр, который является датой...
Я всегда могу изменить свою хранимую процедуру для получения Varchar вместо Date, но мне нужна безопасность типов.
Следующий код может помочь вам понять проблему:
Dim s1 As String = CurrentUICulture.ToString() 'pt-PT
Dim s2 As String = CurrentCulture.ToString()'pt-PT
Dim odate As Date = DateTime.ParseExact(sdate, CurrentUICulture.DateTimeFormat.ShortDatePattern, CurrentUICulture) 'sdate = 19/03/2009
'CurrentUICulture = pt-PT - ShortDatePattern = "dd-MM-yyyy"
'odate is 03/19/2009 !!!
Convert.ToDateTime(sdate, CurrentUICulture)
'its the same!
ПОМОЩЬ!
Ответ 1 · рейтинг 1 · Tor Haugen
DateTimes не имеет формата. Они также не являются экземплярами, поскольку DateTime является типом значения.
Мне кажется, вы считаете, что DateTime "неправильно отформатирован" (вы утверждаете, что это 19.03.2009). Как вы проверили значение odate? Распечатав его как odate.ToString() или проверив его значение в окне отладчика? Попробуйте распечатать его с помощью:
Debug.Print odate.ToString(_
Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _
Globalization.CultureInfo.CurrentUICulture)
odate - это просто DateTime - он содержит количество секунд, прошедших с какой-то давней даты (которую я не могу вспомнить прямо сейчас). Он не имеет информации о форматировании, поэтому будет отформатирован на выходе.
То, что дата 19.03.2009, означает, что ваш парсинг удался. 19.03.2009 - это всего лишь 19 марта 2009 года (3 число 19 месяца - неверная дата). Так что перестаньте волноваться и идите дальше ;-)
Ответ 2 · marc_s
Всякий раз, когда вы имеете дело с датами и SQL Server (я полагаю, что вы тоже здесь), я бы рекомендовал использовать формат ISO-8601 - он должен работать независимо от вашего языка, культуры или других настроек.
ISO-8601 определяет формат даты: ГГГГ-ММ-ДД (с тире или без него; также допустим ГГГГММДД).
Это работает?
Dim oDate as Date = DateTime.Parse("2009-03-06")
на дату 6 марта 2009 года.
См. также: http://www.w3.org/TR/NOTE-datetime
и: http://www.cl.cam.ac.uk/~mgk25/iso-time.html
Ответ 3 · Txugo
Проблема решена... потому что проблемы изначально не было!
Дело в том, что я использовал функцию, которая выглядит примерно так
GetFormatedDate(ByVal sdate As String) As Date
и... если sdate ничего (или null), у меня была неверная дата, когда она достигла хранимой процедуры SQL.
ValueTypes ничего не имеет значения... но можно сделать так:
GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date)
с этим я больше не получаю недопустимое исключение параметра.
Да!