2017-05-22 5 views
0

をAndroidの取得します5-22-17、5-23-17、5-24-17、5-25-17、5:は、私は配列に現在の週と負荷それを取得いくつかのコードを持って、前の週の日付

DateFormat format = new SimpleDateFormat("M-dd"); 

days = new String[7]; 

for (int i = 0; i < 7; i++) 
{ 
calendar.add(Calendar.DATE, -1); 
days[i]=format.format(calendar.getTime()); 
} 

私の問題は、それが例えばロードすることである:配列に日付とロードします-26-17,5-27-17,5-28-17を最初の1週間の最初の読み込みに追加し、前のボタンコードをクリックして前のボタンコードを実行すると、1日:5-21-17-5-27-17。私がもう一度それをクリックすると、それは1週間全体に戻ります:5-14-17 - 5-20-17。

最初のクリックで前週の日を正しく取得するようにコードを修正するにはどうすればよいですか?

+0

は、第一の表示の末尾に '' calendar'の値ではありません5-28'?そしてあなたは '5-28'(これはあなたを5-21にします)から引き算して7回実行します。あなたは再び実行し、5-21から引きますか?だから問題は、週の始まりを別の 'Calendar'オブジェクトに保存するべきですか? – KevinO

答えて

2

まず、あなたは日曜日に、週の最初の曜日を設定していますが、最初の値を取得する前にを追加し、その結果がSat 5/27Sun 5/28Mon 5/22、ないSun 5/21です。

第2に、最初のループが終了すると、Calendarオブジェクトは5/28に座っています。その後、最後の値を取得する前にを差し引く、後方に行くので、あなたが言ったように、結果は、ダウン5/215/275/215/27ではありません。

Calendarオブジェクトは、5/21のままです。上記を繰り返すと、5/205/14になりますが、5/14にはではありません。

あなたが望むカレンダーに言ったように、日曜日から土曜日の週として結果を得るには、の後に1 を追加してください。そして、正しい順序で1週間を得るためには、常に徐々にそれらを取得してください。前週に戻るには、の後にカレンダーがあるので、の週に戻って2週間後に前週のビルドを開始します。

public class Test { 
    private Calendar calendar; 
    public String[] getCurrentWeek() { 
     this.calendar = Calendar.getInstance(); 
     this.calendar.setFirstDayOfWeek(Calendar.SUNDAY); 
     this.calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
     return getNextWeek(); 
    } 
    public String[] getNextWeek() { 
     DateFormat format = new SimpleDateFormat("M-dd"); 
     String[] days = new String[7]; 
     for (int i = 0; i < 7; i++) { 
      days[i] = format.format(this.calendar.getTime()); 
      this.calendar.add(Calendar.DATE, 1); 
     } 
     return days; 
    } 
    public String[] getPreviousWeek() { 
     this.calendar.add(Calendar.DATE, -14); 
     return getNextWeek(); 
    } 
    public static void main(String[] args) { 
     Test t = new Test(); 
     System.out.println("Current : " + Arrays.toString(t.getCurrentWeek())); 
     System.out.println("Previous: " + Arrays.toString(t.getPreviousWeek())); 
     System.out.println("Previous: " + Arrays.toString(t.getPreviousWeek())); 
     System.out.println("Next : " + Arrays.toString(t.getNextWeek())); 
     System.out.println("Next : " + Arrays.toString(t.getNextWeek())); 
    } 
} 

出力

Current : [5-21, 5-22, 5-23, 5-24, 5-25, 5-26, 5-27] 
Previous: [5-14, 5-15, 5-16, 5-17, 5-18, 5-19, 5-20] 
Previous: [5-07, 5-08, 5-09, 5-10, 5-11, 5-12, 5-13] 
Next : [5-14, 5-15, 5-16, 5-17, 5-18, 5-19, 5-20] 
Next : [5-21, 5-22, 5-23, 5-24, 5-25, 5-26, 5-27] 
1

アンカーとして使用されるのではなく、calendarが前進して後退しているということが問題だと思います。このコードは、状況を処理する1つのアプローチを示しています。現在の週の開始を保持し、その時点からの日数を取得します。

/** 
* Returns 7 days starting from the specified starting date 
*/ 
private static String[] getDays(Calendar starting) 
{ 
    DateFormat format = new SimpleDateFormat("M-dd"); 
    String[] days = new String[7]; 
    Calendar mod = Calendar.getInstance(); 
    mod.setTime(starting.getTime()); 

    for (int i = 0; i < days.length; ++i) { 
     mod.add(Calendar.DATE, 1); 
     days[i] = format.format(mod.getTime()); 
    } 

    return days; 
} 

public static void main(String[] args) 
{ 
    // this sets to the beginning of the current week 
    Calendar cal = Calendar.getInstance(); 
    cal.setFirstDayOfWeek(Calendar.SUNDAY); 
    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 

    // need this to back up 
    Calendar beginningOfWeek = cal; 

    // generate the array 
    String days[] = getDays(beginningOfWeek); 

    System.out.println(Arrays.toString(getDays(beginningOfWeek))); 

    // go forward one week 
    beginningOfWeek.add(Calendar.DATE, 7); 
    System.out.println(Arrays.toString(getDays(beginningOfWeek))); 


    // go back one week; same as starting 
    beginningOfWeek.add(Calendar.DATE, -7); 
    System.out.println(Arrays.toString(getDays(beginningOfWeek))); 

    // go back one week; one week before we began 
    beginningOfWeek.add(Calendar.DATE, -7); 
    System.out.println(Arrays.toString(getDays(beginningOfWeek))); 

} 

出力例:

[5-22、5-23、5-24、5-25、5-26、5-27、5-28]
[5- 29,5-30,5-31,6-01,6-02,6-03,6-04]
[5-22,5-23,5-24,5-25,5-26,5 -27、5-28]
[5-15、5-16、5-17、5-18、5-19、5-20、5-21]

なお、いくつかの最適化がありますあるかもしれないgetDays(...)メソッドが呼び出されるたびにformatが作成されないなどの理由があります。また、変数名はOPからのものですが、おそらく最適ではありません。

関連する問題