Можно ли отформатировать столбец даты в таблице данных?

Предположим, у меня есть данные dt, и у него есть столбец DateofOrder,

DateofOrder
07/01/2010
07/05/2010
07/06/2010

Я хочу отформатировать эти даты в столбце DateOfOrder для этого

DateofOrder
01/Jul/2010
05/Jul/2010
06/Jul/2010

Любое предложение..


person ACP    schedule 09.07.2010    source источник
comment
@ Дин, что я не могу понять...   -  person ACP    schedule 09.07.2010
comment
@Dean, я хочу отформатировать эти даты и заменить их в таблице данных.   -  person ACP    schedule 09.07.2010
comment
Если они хранятся как DateTime в таблице данных, то нет смысла их переформатировать. Если они хранятся в виде строк, вам следует просто использовать DateTime.Parse, а затем DateTime.ToString("dd/MMM/yyyy").   -  person Dean Harding    schedule 09.07.2010
comment
лучше отформатировать его в запросе к базе данных   -  person Hao    schedule 09.07.2010
comment
@Hao, похоже, не форматируется так на сервере sql   -  person ACP    schedule 09.07.2010


Ответы (4)


Лучше всего было бы убедиться, что ваш DataTable типизирован, а этот столбец имеет тип DateTime. Затем, когда вы на самом деле печатаете значения на экране, вы можете установить формат в этот момент, не искажая базовые данные.

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

public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
{
    foreach(DataRow row in column.Table.Rows)
    {
        row[column] = conversion(row[column]);
    }
}

Вы можете использовать в своей ситуации, например:

myTable.Columns["DateOfOrder"].Convert(
    val => DateTime.Parse(val.ToString()).ToString("dd/MMM/yyyy"));

Он работает только с нетипизированными таблицами данных (например, тип столбца должен быть объектом или, возможно, строкой).

person Rex M    schedule 09.07.2010
comment
я использовал ваш второй вариант, но Convert не является методом для DataColumn таблицы данных.. - person ACP; 09.07.2010
comment
Вот почему у него есть метод расширения. Вам нужно добавить первый метод, который он использует, в вашу программу, и тогда вы сможете использовать convert. - person fire.eagle; 09.07.2010
comment
@Pandiya, если вы обратите внимание на выделенную жирным шрифтом часть ответа, это метод расширения, который вы должны добавить, поэтому я написал его здесь. - person Rex M; 09.07.2010
comment
Кроме того, обратите внимание, что вам нужно преобразовать ПЕРЕД заполнением вашей таблицы данных, иначе это мало что даст. - person Robert Koch; 05.06.2013
comment
Настройка другого формата будет работать как в другом потоке, заголовок stackoverflow.com/questions/28523515/ - person Suriya; 08.08.2015

.ToString("dd/MMM/yyyy") (при условии, что ваши данные относятся к типу DateTime)

person saille    schedule 09.07.2010

Просто излагая ответ Сейла здесь:

Для DateTime формат не является проблемой. DateTime на самом деле представляет собой количество тиков, считая от полуночи 1 января 1 года нашей эры. Так что, на самом деле, это просто долго. Форматирование становится проблемой только тогда, когда приходит время преобразовать его в строку. Итак, вам придется пойти и позаботиться о форматировании, либо когда вы вытащите его из таблицы данных и будете готовы его вывести, либо поместите его в таблицу данных в виде строки (что я бы не рекомендовал для гибкости целей). Форматирование можно выполнить с помощью вызова .ToString для DateTime, который предлагает Сейл, .ToString("dd/MMM/yyyy")

person fire.eagle    schedule 09.07.2010

Просто чтобы добавить, вам нужно поместить свой метод расширения в файл .cs, обычно какой-то Utility.cs, а затем получить доступ к нему с помощью оператора using.

Полный пример приведен здесь: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

person Trampoline312    schedule 13.09.2020