4

特定の文字列を DataTable に含まれる DateTime に変換しようとしています。しかし、何らかの理由で完全に機能していません。いくつかの組み合わせを試しました。問題は、実際には文字列に日付を囲む " " が含まれていることです。

したがって、値を含む DataTable のセル (二重引用符を含む) "2014-08-08 08:00:00"

私のコードはそのすべてを繰り返し処理し、それを DateTime に変換しようとします (SQL Server に対して bulkCopy.WriteToServer(datatable) を実行するときに必要です)。

  //Fix up default values and remove double quotes from field in order to convert to date
  if(dt.Rows.Count > 0)
  {
      for (int i = 0; i < dt.Rows.Count; i++)
      {
          dt.Rows[i]["usagestartdate"] = 
              dt.Rows[i]["usagestartdate"].ToString() == "" ?
              DateTime.Now.AddYears(-2014) : 
              Convert.ToDateTime((dt.Rows[i]["invoiceid"].ToString().Replace("'", "")));
          dt.Rows[i]["usagestartdate"] = 
              dt.Rows[i]["usageend"].ToString() == "" ? 
              DateTime.Now.AddYears(-2014) : 
              Convert.ToDateTime(dt.Rows[i]["usageend"].ToString());
      }
  }

ループ内の最初の行でエラーが発生します。

文字列は有効な DateTime として認識されませんでした。

キャストを適切に機能させる方法はありますか?

4

3 に答える 3

1

'一重引用符 ( ) と二重引用符( ) を混在させています"

そのため、一部を記述しても、文字列に一重引用符がないため、Replace("'", "")にも置き換えられません。これが、コード内で 1 つのソリューションが からに変更される可能性がある理由です。Replace("'", "")Replace("\"", "")

しかし、ここで別の方法

Convert.ToDateTime(string)オーバーロードを使用しているため、このメソッドはCurrentCultureデフォルトで設定を使用します。また、どの文化にも、二重引用符で囲まれた文字列を"yyyy-MM-dd HH:mm:ss". そのため、次のようなDateTime.TryParseExactメソッドでカスタムの日付と時刻の解析を使用する必要があります。

string s = "\"2014-08-08 08:00:00\"";
string format = "\\\"yyyy-MM-dd HH:mm:ss\\\"";
DateTime date;
if(DateTime.TryParseExact(s, format, CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out date))
{
    Console.WriteLine (date);
}

ここにdemonstration.

于 2014-12-16T19:48:55.643 に答える