Pergunta

Eu estou tentando converter todos os valores DateTime em um DataTable para strings. Aqui está o uso do método I:

private static void ConvertDateTimesToStrings(DataTable dataTable)
{
    if (dataTable == null)
    {
        return;
    }

    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++ )
    {
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            DateTime dateTime;
            try
            {
                dateTime = (DateTime)dataTable.Rows[rowIndex][i];
            }
            catch (InvalidCastException)
            {
                continue;
            }
            dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");
        }
    }
}

Depois de esta linha funciona:

dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");

I verificar o valor da DataTable.Rows [rowIndex] [i] e ver o que ainda é um DateTime, não uma string. Por que isso acontece e como posso resolver isso?

Edit:. Eu estou tentando fazer isso porque eu estou lutando uma API e, infelizmente, eu não tenho a escolha de qual componente para uso

Foi útil?

Solução

Ele pode ter determinado que o tipo de dados da coluna é tempo de data e é reembalagem os valores de data e hora quando você salvar o valor de volta para lá.

Tente este ... Criar uma nova coluna na tabela de dados como um TypeOf (String), e salvar o valor da cadeia para essa coluna. Quando todos os valores foram copiados, descartar a coluna de data e hora.

Outras dicas

Isso simplesmente não vai funcionar, porque você não tiver alterado o tipo de dados underlaying.

Você tem um DataTable, com uma coluna que tem tipo de dados DateTime.

Você pode atribuir uma seqüência para ele, mas ele vai converter de volta para DateTime.

Por que você quer mudá-lo para uma string formatada? você não pode formatar somente quando você precisa para exibi-lo, e o punho como um DateTime até que você tenha para exibi-lo?

Update: é também melhor se você verificar o tipo da coluna antes de tentar converter seja, ele pode ser muito mais rápido:

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}

Não vai funcionar beacuse o tipo de dados da coluna ainda é DateTime e ele vai converter a volta string para data e hora. Eu sugiro para formatar a data para string ao gerar sua mensagem API. Se você ainda precisa gerar uma coluna de cadeia de data e hora valores

foreach (DataColumn column in dataTable.Columns) {
  if (column.DataType == typeof(DateTime)) {
    dataTable.Columns.Add(column.ColumnName + "_string", typeof(string));
  }
}

foreach (DataRow row in dataTable.Rows) {
   foreach (DataColumn column in dataTable.Columns) {
     if (column.DataType == typeof(DateTime)) {
       row[column.ColumnName + "_string"] = row[column.ColumnName].ToString("dd.MM.yyyy hh:mm:ss");
     }
   }
}

Em seguida, você pode remover todas as colunas DateTime ou usar um dataTable.Select () para obter apenas as colunas que você precisa. PS:. Eu não testar o código, cabe a você

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top