public class DateTest {
public static Date geLastWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, -7);
return cal.getTime();
}
public static Date getThisWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 獲得當前日期是一個星期的第幾天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 獲得當前日期是一個星期的第幾天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}
public static Date getNextWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(date));
cal.add(Calendar.DATE, 7);
return cal.getTime();
}
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse("2017-09-10");
System.out.println("今天是" + sdf.format(date));
System.out.println("上週一" + sdf.format(geLastWeekMonday(date)));
System.out.println("本週一" + sdf.format(getThisWeekMonday(date)));
System.out.println("下週一" + sdf.format(getNextWeekMonday(date)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
java獲取本週 上週的所有日期
1 根據當前日期獲得所在周的日期區間(週一和週日日期)
複製代碼
public String getTimeInterval(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// System.out.println("要計算日期爲:" + sdf.format(cal.getTime())); // 輸出要計算日期
// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 獲得當前日期是一個星期的第幾天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
String imptimeBegin = sdf.format(cal.getTime());
// System.out.println("所在周星期一的日期:" + imptimeBegin);
cal.add(Calendar.DATE, 6);
String imptimeEnd = sdf.format(cal.getTime());
// System.out.println("所在周星期日的日期:" + imptimeEnd);
return imptimeBegin + "," + imptimeEnd;
}
複製代碼
2 根據當前日期獲得上週的日期區間(上週週一和週日日期)
複製代碼
public String getLastTimeInterval() {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1;
int offset1 = 1 - dayOfWeek;
int offset2 = 7 - dayOfWeek;
calendar1.add(Calendar.DATE, offset1 - 7);
calendar2.add(Calendar.DATE, offset2 - 7);
// System.out.println(sdf.format(calendar1.getTime()));// last Monday
String lastBeginDate = sdf.format(calendar1.getTime());
// System.out.println(sdf.format(calendar2.getTime()));// last Sunday
String lastEndDate = sdf.format(calendar2.getTime());
return lastBeginDate + "," + lastEndDate;
}
複製代碼
3 獲取一週開始到結束的list集合
複製代碼
public static List<Date> findDates(Date dBegin, Date dEnd)
{
List lDate = new ArrayList();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用給定的 Date 設置此 Calendar 的時間
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用給定的 Date 設置此 Calendar 的時間
calEnd.setTime(dEnd);
// 測試此日期是否在指定日期之後
while (dEnd.after(calBegin.getTime()))
{
// 根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}
複製代碼
4 測試
複製代碼
public class Text{
public statis void main(string args[]){
String yz_time=getTimeInterval(new Date());//獲取本週時間
String array[]=yz_time.split(",");
String start_time=array[0];//本週第一天
String end_time=array[1]; //本週最後一天
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dBegin = sdf.parse(start_time);
Date dEnd = sdf.parse(end_time);
List<Date> lDate = findDates(dBegin, dEnd);//獲取這周所有date
for (Date date : lDate)
{
System.out.println(sdf.format(date));
}
}
}