[英]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/22
到Sun 5/21
Sun 5/28
,而不是Sun 5/21
到Sat 5/27
。
其次,當您完成第一個循環時,Calendar對象位於5/28
。 然后,您向后移動, 在獲得最后一個值之前減去1,因此結果是5/27
降至 5/21
,而不是像您所說的5/21
至5/27
。
這樣日歷對象就位於5/21
。 重復上述操作,您將5/20
降低到5/14
,而不是5/14
到5/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.