2016-10-30 4 views
0

私はC#でDateTimeの奇妙な動作をしています。DateTime月0無効な書式

私は1月にdatepickerを初期化しようとしています。だから私は、新しい日付作る:

DateTime MyDate = new DateTime(2017, 0, 15); 

をしかし、私はこの例外を取得:

System.ArgumentOutOfRangeExceptionがを:年、月、日のパラメータは、非表現のDateTimeを説明します。

私は(2017, 1, 15)を使用している場合、それは動作しますが、使用して初期化時のダイアログ、:

DatePickerDialog dialog = new DatePickerDialog(
    Activity, 
    this, 
    MyDate.Year, 
    MyDate.Month, 
    MyDate.Day); 

が2月に行きます。

は、まあ、私は「カンニング」しようとしなかった:

DateTime MyDate = new DateTime(2017, 1, 15); 
DateTime = DateTime.AddMonths(-1); 

エラーなしに、しかし、日付ピッカーは、2月になります。

1月を持っている唯一の方法は次のとおりです。

DateTime MyDate = new DateTime(2017, 12, 15); 

私が間違って何をしているのですか?

+2

1は、1月は何の0がないです...そのようなインデックスではない –

+0

は、配列インデックスと混同しないでください –

答えて

2

問題DateTimeオブジェクトが月の値(1-12)とどのようにDatePickerDialog扱い月の値(0-11)を処理する方法です。


DateTimeは、コンストラクタ:DateTimeの

DateTime MyDate = new DateTime(2017, 0, 15); 

我々はDateTimeconstructorを見てみた場合の

奇妙な行動、明らかに月の値があるべきことが述べられている1〜12、これはあなたのケースでは有効ではないため、ex 。私たちは以下のようにそれを修正することができます。

DateTime MyDate = new DateTime(2017, 1, 15); 

DatePickerDialogコンストラクタ:私たちがしようとすると、

例外(または奇妙な行動)が発生します - の組み合わせでnew DatePickerDialogDateTimeの月の値とをDatePickerDialogのコンストラクタとして月の値は0-11です。

int: the initially selected month (0-11 for compatibility with MONTH)

、その後に続くことができるのアプローチは、以下のようにDatePickerDialogコンストラクタに月の正しいindexを与えることであると述べられている:

DateTime MyDate = new DateTime(2017, 1, 15); 
DatePickerDialog dialog = new DatePickerDialog(Activity, 
               this, 
               MyDate.Year, 
               MyDate.Month - 1, 
               MyDate.Day); 
+1

ありがとう、すべてがうまくいった。 – Raikoug

7

DateTime.Monthは、1〜12の値で、ほとんどの人が1ヶ月の数字と考えるものと一致します。

android docsによれば、呼び出し元のDatePickerDialogコンストラクタはゼロベースの月を受け入れます。 0〜11の範囲の値を受け入れるので、DateTime.Monthから1を引く必要があります。

DatePickerDialog dialog = new DatePickerDialog(Activity, 
    this, MyDate.Year, MyDate.Month - 1, MyDate.Day); 
+0

ありがとう、非常に便利! – Raikoug