簡體   English   中英

Android獲取上周日期

[英]Android get previous week dates

我有一些獲取當前星期並將其加載到數組中的代碼:

DateFormat format = new SimpleDateFormat("M-dd");
calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

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

然后,我在選擇按鈕的按鈕上運行了一些代碼,該按鈕將檢索前一周的日期並將其加載到數組中:

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());
}

我的問題是,它將加載例如:5-22-17、5-23-17、5-24-17、5-25-17、5-26-17、5-27-17、5-28- 17進入第一周的初始負載,然后當我單擊我的Previous按鈕運行前一個按鈕代碼時,它只能返回1天:5-21-17-5-27-17。 如果我再次單擊它,則返回整個一周:5-14-17-5-20-17。

如何修正我的代碼,以便在第一次點擊時正確地檢索到以前的工作日?

我認為問題在於calendar在前進和后退,而不是被用作錨。 此代碼顯示了一種處理這種情況的方法。 它保持當前的星期開始,並從該點開始獲取天數。

/**
 * 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,但可能不是最佳名稱。

首先,將一周的第一天設置為星期日,但是獲得第一個值之前 ,您應加1,因此結果是Mon 5/22Sun 5/21 Sun 5/28 ,而不是Sun 5/21Sat 5/27

其次,當您完成第一個循環時,Calendar對象位於5/28 然后,您向后移動, 獲得最后一個值之前減去1,因此結果是5/27 降至 5/21 ,而不是像您所說的5/215/27

這樣日歷對象就位於5/21 重復上述操作,您將5/20降低到5/14 ,而不是5/145/20

因此,要在星期天至星期六的一周中獲得結果,就像您告訴日歷所要的那樣,請在獲取值加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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM