ここには多くの問題があります。まず、あなたがやっているように、繰り返しは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
には既にテスト済みの組み込みメソッドがあり、このような問題をすべて回避します。それらを使用してください。ほとんどのオブジェクトに対して、その一部を文字列に変換してロジックを作成しようとしているときに、それを元に戻すと、深刻なコードの匂いが出ます。
これは非常に悪い例でした。実際には私は異なる条件でいくつかの異なるシナリオを持っています。私の意図は、月/日/年の形式に変換することでした。 – Ram
お手伝いしないと助けにならない場合があります。私たちに良い事例を教えてください。 – jason