2009-03-06 7 views
0

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

мне нужно мой семя даты OBJ через рамку Entity, что вызывает хранимую процедуру, которая принимает параметры, что это дата ...

Я всегда могу изменить свою хранимую процедуру, чтобы получить Varchar вместо даты , но я хочу, чтобы тип безопасности.

Следующий код может помочь вам понять проблему:

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!

+0

пожалуйста отступы ваш код, так что легче читать ... –

ответ

0

Проблема решена ... потому, что не было никаких проблем, в первую очередь !

Вещь я использую функцию, которая что-то вроде этого

GetFormatedDate(ByVal sdate As String) As Date 

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

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

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

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

да!

1

DateTimes не имеет формата. Они также не являются экземплярами, поскольку DateTime - тип значения.

Мне кажется, вы думаете, что DateTime «неправильно отформатирован» (вы утверждаете, что это 03/19/2009). Как вы оценили стоимость одата? Распечатав его как odate.ToString() или проверив его значение в окне отладчика? Попробуйте распечатать его с:

Debug.Print odate.ToString(_ 
    Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _ 
    Globalization.CultureInfo.CurrentUICulture) 

Odate просто DateTime - он содержит количество секунд, прошедших с некоторой даты давно (что один я не могу быть обеспокоен, чтобы помнить прямо сейчас). Он не имеет информации о форматировании и поэтому будет отформатирован на выходе.

Тот факт, что дата 03/19/2009 означает, что ваш синтаксический анализ удался. 19.03.2009 - это только 19 марта 2009 года (3-й из 19-го месяца не является действительной датой). Так что перестаньте беспокоиться и двигаться дальше ;-)

+0

«Мне кажется, вы думаете, что DateTime является„неправильно отформатирован“(» я не думаю, что ... Я знаю! я проверил debug mode Кстати: «Конструктор DateTime (Int32, Int32, Int32, Int32, Int32, Int32, Календарь) Инициализирует новый экземпляр структуры DateTime – Txugo

+0

в указанные год, месяц, день, час, минуту и второй для указанного календаря ». Экземпляр И у него есть информация о форматировании. И мне это нужно, поэтому у меня нет исключения переполнения из sql srv. Итак, если ваш не умный enouth ответить или даже раскрыть вопрос. Нельзя писать. – Txugo

0

Всякий раз, когда речь идет о датах и ​​SQL Server (который, как я полагаю, вы здесь тоже), я бы рекомендовал использовать формат ISO-8601 - он должен работать независимо от вашего языка, культуры или другие настройки.

ISO-8601 определяет формат даты: ГГГГ-ММ-ДД (с тире или без тире, YYYYMMDD также приемлемо).

Это работает?

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

Смежные вопросы