和獲取今日開始和結束的時間戳一樣,本週開始和結束的時間戳,就是以本週第一天開始的00:00到本週最後一天的23:59分結束。
需要注意的是,國際上是以星期日爲一週第一天的開始,Calendar中提供的DAY_OF_WEEK獲取的一週也是以星期日作爲一週的開始。
而中國的習慣是以星期一作爲一週的開始,所以需要根據項目的實際需求來設置。
1、以星期日作爲一週的開始
/**
* start
* 本週開始時間戳
*/
public static String getWeekStartTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale.getDefault());
Calendar cal = Calendar.getInstance();
// 獲取星期日開始時間戳
cal.set(Calendar. DAY_OF_WEEK, Calendar.SUNDAY);
return simpleDateFormat.format(cal.getTime()) + "000000000";
}
/**
* end
* 本週結束時間戳
*/
public static String getWeekEndTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale.getDefault());
Calendar cal = Calendar.getInstance();
// 獲取星期六結束時間戳
cal.set(Calendar. DAY_OF_WEEK, Calendar.SATURDAY );
return simpleDateFormat.format(cal.getTime()) + "235959999";
}
2、以星期一作爲一週的開始
在設置星期一爲一週第一天的時候遇到個坑
查閱api的時候看到了這個函數setFirstDayOfWeek()
然後代碼是這樣寫的:
/**
* start
* 本週開始時間戳
*/
public static String getWeekStartTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale.getDefault());
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 獲取星期一開始時間戳
cal.set(Calendar. DAY_OF_WEEK, Calendar.MONDAY);
return simpleDateFormat.format(cal.getTime()) + "000000000";
}
/**
* end
* 本週結束時間戳
*/
public static String getWeekEndTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale.getDefault());
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 獲取星期日結束時間戳
cal.set(Calendar. DAY_OF_WEEK, Calendar.SUNDAY);
return simpleDateFormat.format(cal.getTime()) + "235959999";
}
這兩個方法在本週的星期一到星期六的時候,獲取到的數據是正常的,確實返回的是本週星期一到星期日的時間戳。
但是到了本週星期日的時候出現問題了,兩方法在星期日的時候,獲取到的是下個星期一和下個星期日的日期!
最後找了半天的資料,原來是對setFirstDayOfWeek的理解出了問題
Calendar中的星期一、二、三、四、五、六、日、DAY_OF_WEEK等都是以一個常量的形式存在的,我們設置setFirstDayOfWeek()並不能改變這些常量的值
參考:https://coderanch.com/t/381293/java/java/setFirstDayOfWeek-Calendar
正確的代碼應該這樣寫:
/**
* start
* 本週開始時間戳 - 以星期一爲本週的第一天
*/
public static String getWeekStartTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale. getDefault());
Calendar cal = Calendar.getInstance();
int day_of_week = cal.get(Calendar. DAY_OF_WEEK) - 1;
if (day_of_week == 0 ) {
day_of_week = 7 ;
}
cal.add(Calendar.DATE , -day_of_week + 1 );
return simpleDateFormat.format(cal.getTime()) + "000000000";
}
/**
* end
* 本週結束時間戳 - 以星期一爲本週的第一天
*/
public static String getWeekEndTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale. getDefault());
Calendar cal = Calendar.getInstance();
int day_of_week = cal.get(Calendar. DAY_OF_WEEK) - 1;
if (day_of_week == 0 ) {
day_of_week = 7 ;
}
cal.add(Calendar.DATE , -day_of_week + 7 );
return simpleDateFormat.format(cal.getTime()) + "235959999";
}