Проблема с вводом строки с форматом d-MMM-yy parse.exact к дате, но сохраняющей формат даты и тип даты для сортировки - PullRequest
0 голосов
/ 23 февраля 2012

Как следует из названия, я ввожу строку даты из таблицы данных в формате "d-MMM-yy" или 27-AUG-06.

Мне нужно преобразовать его в тип даты для сортировки, но мне нужно сохранить тот же формат для отображения.

ПРИМЕЧАНИЕ. Я использую C #, .Net 2.0 и перепечатываюэтот код так терпеть меня на опечатки

System.Globalization.DateTimeFormatInfo dtfi;
dtfi = new System.Globalization.DateTimeFormatInfo();
dtfi.ShortDatePattern = "d-MMM-yy";
dtfi.DateSeperator = "-";

//this is in a for loop with rowCnt being the row index/counter: loop and datatable is working fine. 
//"newRow" represents a DataRow in the new table.
// the table [row] [column] is bringing in the string date like "27-AUG-06"
//colXDate IS RECORDED AS {8/27/2006 12:00:00 AM}
DateTime colXDate = DateTime.ParseExact(inputDataTable.Rows[rowCnt]["colX"].ToString(), "d-MMM-yy", System.Globalization.CultureInfo.InvariantCulture);

//@@@@ THIS NEXT LINE IS WHERE IT GIVES ME AN ERROR "String was not recognized as valid datetime."
newRow["colX"] = Convert.ToDateTime(colXDate.ToString(), dtfi);

Ответы [ 3 ]

0 голосов
/ 23 февраля 2012

Ваша строка не работает, потому что ToString() выведет дату в формате, определенном в текущей культуре, и вы пытаетесь преобразовать ее обратно в дату, используя ваш пользовательский формат даты.

Вам необходимо установить colXDate.ToString("d-MMM-yy").

0 голосов
/ 24 февраля 2012

СЦЕНАРИЙ: Я передаю данные обратно в качестве источника данных DataGrids.Я передаю в строковом поле, которое является датой.Я хочу преобразовать ее в дату, чтобы можно было отсортировать ее, но я также хочу сохранить тот же формат, что и в строке, которая вошла.

ВЫПУСК: Из некоторых моих исследований кажется, чтотип DateTime - это именно тот тип данных в любом наборе данных, в который вы его поместили, и он не форматируется.Поэтому, даже если я ввожу нестандартную строковую дату и преобразовываю ее в datetime через DateTime.ParseExact, когда я помещаю ее в свое поле datetime и пытаюсь отформатировать ее (newRow ["colX"] = colXDate.ToString ("d-МММ-уу "); // как и Скотт выше) он по-прежнему работает в виде установленного формата даты и времени с часами ... и т. Д.

РЕШЕНИЕ: Итак, я решил это дымом и зеркалами.Я поместил 2 столбца в таблицу данных, первый из которых представляет дату отображения в формате строки, а второй - тип datetime.В ItemDataBound я спрятал столбец datetime (e.Item.Cells [5] .Visible = false;), а затем в событии сортировки проверяю столбец строковой даты (e.SortExpression == "colX"), и если это правда,сортировка по скрытому столбцу даты и времени.

0 голосов
/ 23 февраля 2012

Поскольку у вас уже есть colXDate в качестве DateTime, вам не нужно преобразовывать его в строку, а затем обратно в datetime. Вместо этого попробуйте это:

newRow["colX"] = colXDate.ToString("d-MMM-yy");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...