0

IamはExcelファイルから2列を読み取っています:

1つの列の値:2012年7月11日

2列目の値:18:45

2列目を読むと、実際にはその前にデフォルトの日付が表示されています。dr [3] .ToString() "30/12/18996:45:00PM"文字列

最初の列と2番目の列を結合したいと思います。しかし、今は通常の入力形式の例外があります

文字列操作で2列目から日付部分を削除しようとしました

これが私のコードです

 DateTime dateEvent = DateTime.Parse(dr[1].ToString());
        dateEvent.Add(TimeSpan.Parse(dr[3].ToString().Substring(dr[3].ToString().IndexOf(" ")+1)));

Udpate 1:

DateTime dateEvent = DateTime.ParseExact(string.Format("{0} {1}", dr[1].ToString(), dr[3].ToString().IndexOf(" ") + 1), "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
4

3 に答える 3

1

DateTime.ParseExact方法を試してください:

string date = dr[1].ToString();
string time = dr[3].ToString();
time = time.Substring(time.IndexOf(' ') + 1);
DateTime.ParseExact(string.Format("{0} {1}", date, time), "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
于 2012-11-23T13:54:16.677 に答える
1

編集:もう一度見てみると、構文解析をまったく行う必要がないのではないかと強く思います。私はあなたが使うことができると思う:

DateTime date = ((DateTime) dr[1]).Date;
TimeSpan time = ((DateTime) dr[3]).TimeOfDay;
DateTime combined = date + time;

タイプが何であるかを理解せずに、単に盲目的ToString()に値を呼び出すべきではありません。多くの場合、それは正確に正しいタイプであり、潜在的に損失のある文字列変換を節約できます。


(Excelをに変換するのではなく)解析する必要があると仮定すると、両方の部分DateTimeに使用することをお勧めします。DateTime.ParseExact

  • 最初の部分には、次の形式を使用しますdd/MM/yyyy
  • 2番目の部分では、次の形式を使用しますdd/MM/yyyy hh:mm tt

この形式が完全に修正されていることを本当に知っていると仮定して、不変のカルチャを明示的に使用することをお勧めします。(そうでない場合、それはより大きな問題です。)

次に、次のようにそれらを結合します。

DateTime combined = date.Date + time.TimeOfDay;

または、私のNoda Timeライブラリを使用することもできます。このライブラリには、個別LocalDateLocalTime概念があり、簡単に組み合わせてLocalDateTime...

于 2012-11-23T13:54:48.080 に答える
1

DateTime.ParseExactを使用することをお勧めします。そうすれば、日付のどの部分が必要かを具体的に言うことができます。

var date = DateTime.ParseExact(dr[1], "dd/MM/yyyy", CurrentCulture.InvariantCulture).Date;
var time = DateTime.ParseExact(dr[3], "HH:mm", CurrentCulture.InvariantCulture).TimeOfDay;
var eventDate = date + time;
于 2012-11-23T14:00:35.167 に答える