4

DataTable のすべての DateTime 値を文字列に変換しようとしています。私が使用する方法は次のとおりです。

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");
        }
    }
}

この行が機能した後:

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

dataTable.Rows[rowIndex][i] の値を確認すると、文字列ではなく、まだ DateTime であることがわかります。なぜこれが起こり、どうすれば解決できますか?

編集:APIと戦っているため、これを実行しようとしていますが、残念ながら、使用するコンポーネントを選択できません。

4

3 に答える 3

14

基礎となるデータ型を変更していないため、これは単に機能しません。

データ型がDateTimeの列を持つDataTableがあります。

String を割り当てることができますが、DateTime に変換されます。

なぜフォーマットされた文字列に変更したいのですか? 表示する必要があるときだけフォーマットして、表示する必要があるまでDateTimeとして扱うことはできませんか?

更新:変換を試みる前に列のタイプを確認すると、はるかに高速になる可能性もあります。

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}
于 2008-10-15T11:41:16.227 に答える
6

列のデータ型が日時であると判断された可能性があり、値をそこに保存すると、値が日時に再ボックス化されます。

これを試してください... データテーブルに新しい列を TypeOf(String) として作成し、文字列値をその列に保存します。すべての値がコピーされたら、日時列を削除します。

于 2008-10-15T11:41:27.147 に答える
1

列の DataType がまだ DateTime であり、文字列を datetime に変換するため、機能しません。API メッセージを生成するときに、日付を文字列にフォーマットすることをお勧めします。日時値の文字列列を生成する必要がある場合

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");
     }
   }
}

次に、すべての DateTime 列を削除するか、dataTable.Select() を使用して必要な列のみを取得できます。PS: 私はコードをテストしませんでした。それはあなた次第です。

于 2008-10-15T12:20:39.033 に答える