2013-05-12 4 views
0

В моей GridView я могу видеть мою колонку даты, как mm/dd/yy нормально, но когда я выбрать запись и присвоить строку вроде такКонверсия удалось при преобразовании даты и/или времени из символьной строки в GridView

GridViewRow row = GridView1.SelectedRow; 
string sdate= row.Cells[2].Text; //Date is in Column 2 

Когда я выход этой sdate строка возвращает: 1368309600000

и если я пытаюсь преобразовать его, он не работает, и я стараюсь, чтобы выбрать что-то из базы данных SQL, и я получаю эту ошибку

Конверсия удалось при преобразовании даты и/или времени из символьной строки

EDIT: часть в операторе SQL для преобразования является:

convert(datetime, '" + sdate +"', 101"+") 

Я подозреваю, что проблема в самой sdate но я не уверен

+0

показать нам код, в котором вы его конвертируете. Могло бы быть много чего, я часто это видел при переключении с тестовой среды на производство, а форматирование System Time/Date отличается. – clamchoda

+0

Законодательство требует уточнения: уверены ли вы, что у вас нет ошибки в вашей индексации, то есть «2» означает второй столбец, который на самом деле должен быть «1» с нулевым значением, основанная индексация? Кроме того, попробуйте индексировать столбец даты по имени столбца, если это возможно, чтобы убедиться, что вы назначаете значение из указанного вами столбца. – J0e3gan

+1

Я уверен, потому что я выбираю 'Cells [1]' он возвращает правильный colum – user2321895

ответ

0

Ваша строка даты выражается как число миллисекунд с 1 января 1970 года, 00:00:00 GMT. Функция T-SQL CONVERT() не поддерживает этот формат. Таким образом, вы могли бы сделать преобразование в C# DateTime как это ...

DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) 
        .AddMilliseconds(Convert.ToDouble(sdate)); 

1368309600000 превращается в 11/05/2013 22:00:00Z (это UTC)

Затем установите для местного времени и переформатировать даты для SQL строки, как это ...

"convert(datetime, '" + date.ToLocalTime().ToString("MM/dd/yyyy") + "', 101)" 
+0

Да, это эпоха эпохи. Предполагается, что это будет 05/12/2013 – user2321895

+0

Согласно www.unixtimestamp.com, он преобразуется правильно, я предполагаю, что из-за часового пояса. – user2321895

+0

@ пользователь2321895, да, конечно. Я добавил к 'ToLocalTime()' вызов к моему ответу. – davmos

-2
UpdateCommand="UPDATE [dbo].[ENTRY] set [_DATE] = CONVERT(date , @_DATE ,103) where [NO] = @NO " 

важная часть здесь 103 это для формата дд-мм-гггг проверить вашу местную Forma т. эта проблема возникает только для людей за пределами Америки.

+0

Как '103' помогает ему, когда его дата находится в формате' mm/dd/yy'? И, кстати, вы имели в виду «Америку»? –

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