2016-10-11 13 views
0

私はアンドロイドのカレンダーの例を構築し動作していないが、私はそれで働いていたとき、私は奇妙です。Javaのカレンダーget()メソッドは、

私は月曜日、私は設定されたこの週を取得しようとしました。ただし、このコード内

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, day); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
int start = calendar.get(Calendar.DAY_OF_MONTH); 

私は正しい行動を取ることができません。症状は、私は今週 の右月曜日を得ることができますですが、先週も私にこの月曜日を与えたので、私はその後、私は私が何をしたい右のアクティビティを取得することができます

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, day); 
int start = calendar.get(Calendar.DATE); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
start = calendar.get(Calendar.DATE); 

ある別のコードを試してみました。それが働いて、これら2つのコードの間の差である理由を私は知らないが

読んで助けてくれてありがとう!

+0

チェックこのリンクhttpです: //stackoverflow.com/questions/14118894/how-to-get-day-from-specified-date-in-android –

+0

「Calendar.DATE」はあなたに月の日を与えます。これがあなたの意図だったなら、 'Calendar.DAY_OF_MONTH'を使うのが良いでしょう。それはもっと簡潔です。 – Stefan

答えて

0

まずimportan情報、カレンダーは寛大と非寛大カレンダフィールドを解釈するための2つのモードがあります。

カレンダー厳密モードである場合、それはそれが生成するよりも、カレンダフィールド値の広い範囲を受け付けます。 Calendarがget()によって返されるカレンダーフィールド値を再計算すると、すべてのカレンダーフィールドが正規化されます。たとえば、寛大なGregorianCalendarは、MONTH == JANUARY、DAY_OF_MONTH == 32を2月1日と解釈します。

カレンダーが非寛容モードの場合、カレンダーフィールドに矛盾があると例外がスローされます。たとえば、GregorianCalendarは、1からその月の長さまでのDAY_OF_MONTH値を常に生成します。非寛容なGregorianCalendarは、範囲外のフィールド値が設定されている場合、時間またはカレンダフィールドの値を計算する際に例外をスローします。
カレンダーセットメソッドでは、フィールド値のみが設定されますが、更新時間は設定されず、getメソッドを使用するまですべてのフィールド(年、月、日など)が計算されます。

寛大モードでのカレンダーの実行が、ここにコードされている場合:

Calendar calendar = Calendar.getInstance(); 
calendar.setLenient(true); 
calendar.set(Calendar.DATE, 1); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); 

コードの実行結果がmothedコール2セットした後、10 で、日付、今の時間を更新するために始めるカレンダー、Calendar.DAY_OF_MONTHを得る呼び出しを開始1月曜日のDAY_OF_WEEKは混乱が、カレンダーは厳密モードであり、最終日2016年10月10日を計算し、その結果、非厳密モードで10

同じコードであり得る:

Calendar calendar = Calendar.getInstance(); 
calendar.setLenient(false); 
calendar.set(Calendar.DATE, 1); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); 

throws java.lang.IllegalArgumentException:DAY_OF_MONTH例外。

最後のコード:最初の呼び出しはCalendar.DATEを得るとき

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DATE, 1); 
int start = calendar.get(Calendar.DATE); 
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
start = calendar.get(Calendar.DATE); 

コードの実行結果は26 で、この呼び出しは、すべてのフィールドをupdatetimeして計算します。日付が2016年10月1日.thenコールセット(Calendar.DAY_OF_WEEKの、Calendar.MONDAY)で計算し、このコールgetメソッドの後、日付を計算する2016年9月26日なので、結果は26

関連する問題