Проблемы формата даты культуры - PullRequest
0 голосов
/ 06 марта 2009

У меня были проблемы с датами. Мне нужно иметь экземпляр DateTime, который имеет формат "dd-MM-yyyy". Я НЕ прошу иметь строку моего экземпляра даты в "dd-MM-гггг", которую я знаю.

Мне нужно заполнить мою дату obj через среду 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!

HELP!

Ответы [ 3 ]

1 голос
/ 06 марта 2009

Дата и время не имеют формата. Они также не являются экземплярами, поскольку 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-го месяца не является действительной датой). Так что перестань волноваться и продолжай; -)

0 голосов
/ 11 марта 2009

Проблема решена ... потому что, во-первых, проблем не было!

Дело в том, что я использовал функцию, похожую на эту

GetFormatedDate(ByVal sdate As String) As Date

и ... если sdate - ничто (или ноль), у меня была неверная дата, когда она достигла хранимой процедуры SQL.

ValueTypes ничего не имеет, имеет значение ... но это можно сделать:

GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date)

при этом я больше не получаю недопустимое исключение param.

да!

0 голосов
/ 06 марта 2009

Когда бы вы ни работали с датами и 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...