2010-04-13 2 views
1

я, кажется, есть проблема, дата форматирования каждый день!Еще одна проблема, дата форматирования :(

Я запрашивая таблицу и я получаю дату обратно в формате дд/мм/гггг (как строка кстати) . Brilliant! вот что я хочу. Но, теперь я хочу, чтобы преобразовать эту строку в дату, так что я могу сделать

dim dayNumber as integer = day.DayOfWeek 

Но когда я преобразовать его в дату его изменения его # м/дд/гггг # AHHHH! Как я могу это изменить?

вот мой код, который я пробовал

Dim ActivityDate As String 
If dt.Rows(i)("Date") Is DBNull.Value Then 
    ActivityDate = "" 
Else 
    ActivityDate = dt.Rows(i)("Date") 
End If 

Dim ci As New System.Globalization.CultureInfo("en-CA") 
Dim theDate As Date = Date.Parse(ActivityDate, ci) 

Dim day As Integer = theDate.DayOfWeek 

Приветствия

+2

Почему вы вытаскиваете строковое число из базы данных? _This должен быть столбцом datetime, и это означает, что вы можете напрямую назначать ненулевые значения переменной datetime. –

ответ

4

Блестящий! thats, что я хочу

Это не то, что вы хотите. Это самый худший формат для даты, потому что это настолько ужасно неоднозначно. Формат строки даты зависит от текущей культуры. «4/1/2010» - день единорога в SO, это день в январе в Европе. «# 4/1/2010 #» - это устаревший формат VB6.

Всегда хранить даты в формате DateTime в вашем коде. Всегда хранить даты в столбце базы данных типа datetime в вашей базе данных. Там никогда не бывает никакой двусмысленности, и вы легко проведете время с членами DateTime, чтобы манипулировать датами.

+0

спасибо, я собираюсь изменить типы столбцов. – iamjonesy

0

Вы разборе это следующим образом:

Dim newDate as DateTime = DateTime.Parse(myDate) 
+0

Я не был. Пробовал это, и все было точно так же. – iamjonesy

0

Если культура вашей системы не использует этот формат даты, то вы должны получить эту строку даты в качестве фактической даты:

' canadian date format is dd/mm/yyyy 
Dim ci As New System.Globalization.CultureInfo("en-CA") 
Dim theDate As Date = Date.Parse("13/04/2010", ci) 
+0

Я получил дату как строку. Так будет преобразование из строки на сегодняшний день. Я попробовал ваш пример, но он никогда не менял форматирования :( Я добавил код к своему сообщению – iamjonesy

1

Если преобразовать строку в дату, вы всегда можете вывести его обратно в исходный формат, используя строку пользовательского формата: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

+0

Я пробовал несколько примеров из ссылки, но никто не отформатировал его правильно. – iamjonesy

0

Убедитесь, что вы указали точный формат синтаксического анализа следующим образом:

Console.WriteLine(DateTime.ParseExact("17/12/2010", "dd/mm/yyyy", null)); 

Я не уверен, что последний параметр, но это можно проигнорировать.

+0

спасибо, но он не работал: ( – iamjonesy

0

Я предполагаю, что вы видите # m/dd/yyyy # в отладчике, как этот снимок экрана ниже. Не волнуйся!

A Date переменная не сохраняется как строка. Отладчик должен преобразовать ваш Date в строку, чтобы отобразить его, и он настаивает на показе дат в формате # m/dd/yyyy #. Но это не влияет на поведение вашей программы во время выполнения.

Screenshot of Visual Studio Debugger http://img707.imageshack.us/img707/6205/debugger.gif

1

Правильное решение здесь (по крайней мере, пока вы не скажете нам, почему это не возможно), чтобы обновить базу данных, чтобы использовать тип столбца даты и времени, а не VARCHAR. Теперь мы также знаем, что этот столбец не имеет значений NULL, потому что в противном случае вы будете жаловаться на исключения в своем вызове Date.Parse().После применения обоих этих предложений, вы можете обрезать все, что код к простому однострочника:

Dim day As Integer = DirectCast(dt.Rows(i)("Date"), DateTime).DayOfWeek 

Могу ли я спросить, почему вы шлейфового строки таблицы? Я работал в магазине, где это было нормой, но поскольку я остался там, я столкнулся с альтернативами, и все больше и больше я прихожу к тому, чтобы найти сквозной файл, как просто неправильно. Это более старый императивный стиль кодирования, и обычно вы хотите использовать декларативный стиль кодирования.

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