C # datetime xml rowfilter - PullRequest
       18

C # datetime xml rowfilter

0 голосов
/ 05 июля 2018

Я знаю, что этот вопрос задавался ранее, но ответы не были ясны.

У меня есть xml, в котором дата хранится в виде обычного текста в формате "дд / мм / гггг сссс"

Когда я пытался использовать dataset.rowfilter (). Ввод может быть настроен либо на дд / мм / гггг, либо на мм / дд / гггг, но сравнение из фильтра строк только видит стиль сравнения как мм / дд / гггг. Возможно, это как-то связано с американской датой и британской разницей в дате.

StartDate и EndDate взяты из datetimepicker. его не нужно анализировать. Сравнение выполняется в вызове rowfilter как mm / dd / yyyy, а не как определяемый пользователем dd / mm / yyyy.

filter = " (Date >= #" +
     StartDate.value.ToString("dd/MM/yyyy") +
     "# And Date <= #" +
     EndDate.value.ToString("dd/MM/yyyy") +
     "# ) ";

если я сделаю выше, сравнение не увидит, например, 13/01/2018 в качестве даты. Это дает ошибку исключения, говоря, что это недопустимая дата. ( Эта ошибка синтаксического анализа возникает из-за сравнения фильтра строк, а не из-за синтаксического анализа даты ) Поскольку он считывает ее как мм / дд / гггг.

Есть ли в любом случае правильное использование rowfilter для принудительного применения их метода сравнения или мне нужно изменить все хранилище данных xml на "MM / dd / yyyy", чтобы использовать rowfilter.

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Хорошо, вот что я сделал ..

Я немного обманул. Я написал своппер Date со строковыми манипуляциями, чтобы поменять местами дд / мм / гггг на мм / дд / гггг или vis vera. Перед вызовом .rowfilter.

Я превратил dataview в datatable, изменил все строки строки столбца datetime, используя своппер date, затем выполнил сортировку rowfilter, после получения результата я снова вызываю swapper date, чтобы преобразовать его обратно. Длинный процесс, но это кажется, это единственный способ, так как .rowfilter использует только мм / дд / гггг для> = <= сравнения. </p>

Спасибо, Челван.

0 голосов
/ 05 июля 2018

Вы используете неправильный способ конвертации

Вот почему возникает ошибка.

Так что, если вам нужно сообщить компилятору, что у вас есть определенный формат даты и времени, и конвертировать соответственно, вы должны

Использовать DateTime.ParseExact Метод

Как

DateTime.ParseExact(startTime,"dd/MM/yyyy hh:mmtt", null);

Это проанализирует вашу строку в формате, который вы определили, а не в том, который определил система.

Обновление:

filter = " (Date >= #" +
         Convert.ToDateTime(txtFromDate.Text).ToString("MM/dd/yyyy") +
         "# And Date <= #" +
         Convert.ToDateTime(txtToDate.Text).ToString("MM/dd/yyyy") +
         "# ) ";
...