質問
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と戦っているのでこれをしようとしていますが、残念ながら使用するコンポーネントを選択できません。
解決
列のデータ型が日時であると判断し、値を保存して戻すときに値を日時に再ボックス化している可能性があります。
試してみてください... データテーブルにTypeOf(String)として新しい列を作成し、その列に文字列値を保存します。すべての値がコピーされたら、日時列をドロップします。
他のヒント
下にあるデータ型を変更していないため、これは単に機能しません。
データ型DateTimeの列を持つDataTableがあります。
文字列を割り当てることができますが、DateTimeに変換されます。
フォーマットされた文字列に変更したいのはなぜですか?表示する必要があるときだけフォーマットし、表示するまでDateTimeとして処理することはできませんか?
更新:また、変換を試みる前に列のタイプを確認することをお勧めします。はるかに高速です:
if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}
列の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:コードをテストしませんでした、あなた次第です。