2011-01-31 9 views
0

このコンテンツをDateTimeに変換しようとしています。日時の問題への変換

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.AddYears(1).Year.ToString()); 

ここで、「文字列が有効な日時として認識されませんでした」という例外が表示されます。どこが間違っているのですか?誰かが私を助けることができます。ちょうどバックDateTimeオブジェクトにそれを解析する文字列を作成するには、

DateTime dtmNextPayment = DateTime.Now.AddMonths(1); 

必要はありません:

+0

これは非常に悪い例でした。実際には私は異なる条件でいくつかの異なるシナリオを持っています。私の意図は、月/日/年の形式に変換することでした。 – Ram

+0

お手伝いしないと助けにならない場合があります。私たちに良い事例を教えてください。 – jason

答えて

4

ここには多くの問題があります。まず、あなたがやっているように、繰り返しはDateTime.Nowを使用することは決してありません。代わりに、

DateTime now = DateTime.Now; 

を入力し、次にnowを使用します。これは、DateTime.Nowが呼び出しの間に新しい日、または月、または年にロールオーバーできるためです。

もちろん、これで問題は解決されません。今それに取り組んでみましょう。あなたは明確nowに1ヶ月追加しようとし、そうしている理由ではない

DateTime dtmNextPayment = now.AddMonths(1); 

それはnow.AddMonths(1)nowを変異させていないことに注意することは非常に重要です。このため、新しいインスタンスにDateTimeを割り当てる必要があります。

次に、あなたのポストのオリジナルバージョンはDateTime.Nowは2011年12月1日である場合には、これは私はあなたが意図するものである疑い

new DateTime(2011, 1, 1); 

が生成されます

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Year.ToString()); 

を持っていました。理由は分かりますか?日付が1月1日であるとき

new DateTime(2012, 2, 1) 

でこの結果を編集する

あなたの試み、2011年には、私はあなたがほとんどの企業としてつもり何これは、事前に1ヶ月と1年を請求していないことを疑います。やめてもう一度考えてください。

さらに、2011年2月31日(または2012年2月31日)が存在しないため、2011年1月31日の場合は実行を停止します。これがあなたが今得ている例外を得ている理由です。明日(2011年2月1日)にコードを実行してください。「正常」になります。

最後に、深刻な文化問題があるため、やっていることをしないでください。すべての文化のフォーマットは、あなたがそれらをフォーマットしようとしている方法とは異なります。

モラル:DateTimeには既にテスト済みの組み込みメソッドがあり、このような問題をすべて回避します。それらを使用してください。ほとんどのオブジェクトに対して、その一部を文字列に変換してロジックを作成しようとしているときに、それを元に戻すと、深刻なコードの匂いが出ます。

+1

OPは月と年を追加しています;)スクロール.... –

+1

@Caspar、これはステルス編集です。おそらく、それはこの批判に対する失敗した反応です。 –

+0

@Caspar Kleijne:それは以前は強調されていなかった。 OPは彼の投稿を編集し、問題を悪化させただけです。 – jason

3

ちょうどこれを行う..事前にありがとうございます。

0

なぜあなたは使用しません: DateTime dtmNextPayment = DateTime.Now.AddMonths(1);

0

は、この方法を試してください。

ここ
DateTime dtmNextPayment = DateTime.Now.AddDays(1).AddMonths(1).AddYears(1); 

あなたは現在の時刻を取得し、それに日と月と年を追加します。