一.java获取今天是第几周,类似excel的WEEKNUM公式,但以下周是从周一开始算。
并获取本周的开始结束时间,及上一周的开始结束时间
static int getWeekOfYear(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = f1.parse(Strdate);
Calendar c1=Calendar.getInstance();
c1.setFirstDayOfWeek(Calendar.MONDAY);//周设置为从周一开始
c1.setTime(d1);
int weekOfYear= c1.get(Calendar.WEEK_OF_YEAR);
int month=c1.get(Calendar.MONTH)+1;
if(month==12&&weekOfYear==1){//如果12月的被归为第一周,则等于上周加1周(Calendar默认1月1号的那周是第一周)
c1.add(Calendar.DAY_OF_MONTH,-7);
weekOfYear=c1.get(Calendar.WEEK_OF_YEAR)+1;
}
return weekOfYear;
}
static String getWeekStartTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = f1.parse(Strdate);
int weekOfYear= getWeekOfYear(Strdate);
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要-1,且周日=7
if(weekOfYear==1){
c2.set(Calendar.DAY_OF_MONTH, 1);//第一周开始是1月1号
}else{
c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1);
}
c2.set(Calendar.HOUR_OF_DAY, 0);
c2.set(Calendar.MINUTE, 0);
c2.set(Calendar.SECOND, 0);
String starT=f1.format(c2.getTime());
// System.out.println("week start time:"+starT);
return starT;
}
static String getWeekEndTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = f1.parse(Strdate);
Calendar c3=Calendar.getInstance();
c3.setFirstDayOfWeek(Calendar.MONDAY);
c3.setTime(d1);
int month=c3.get(Calendar.MONTH)+1;
int dayOfWeek=c3.get(Calendar.DAY_OF_WEEK)-1==0?7:c3.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要-1,且周日=7
if(month==12&&c3.get(Calendar.WEEK_OF_YEAR)==1){//最后一周结束时间是12月31号,因为是0点所已再加1天
c3.set(Calendar.DAY_OF_MONTH, 31);
c3.add(Calendar.DAY_OF_YEAR, 1);
}else{
c3.add(Calendar.DAY_OF_WEEK, 7-dayOfWeek+1);
}
c3.set(Calendar.HOUR_OF_DAY, 0);
c3.set(Calendar.MINUTE, 0);
c3.set(Calendar.SECOND, 0);
String endT=f1.format(c3.getTime());
// System.out.println("week end time:"+endT);
return endT;
}
static String getlast1WeekStartTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String starT=getWeekStartTime(Strdate);
Date d1 = f1.parse(starT);
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
c2.add(Calendar.DAY_OF_YEAR, -1);//开始时间的1天前
String last1DayOfstarT=f1.format(c2.getTime());
String last1WeekstarT=getWeekStartTime(last1DayOfstarT);
return last1WeekstarT;
}
//上一周的结束时间就是本周的开始时间,可以不用这么写:
static String getlast1WeekEndTime(String Strdate) throws ParseException{
String last1WeekstarT=getlast1WeekStartTime(Strdate);
String last1WeekEndT=getWeekEndTime(last1WeekstarT);
return last1WeekEndT;
}
测试:
String d1="2021-12-31 00:00:00";
System.out.println("getWeekOfYear: "+getWeekOfYear(d1));
System.out.println("getWeekStartTime: "+getWeekStartTime(d1));
System.out.println("getWeekEndTime; "+getWeekEndTime(d1));
System.out.println("getlast1WeekStartTime: "+getlast1WeekStartTime(d1));
System.out.println("getlast1WeekEndTime: "+getlast1WeekEndTime(d1));
getWeekOfYear: 53
getWeekStartTime: 2021-12-27 00:00:00
getWeekEndTime; 2022-01-01 00:00:00
getlast1WeekStartTime: 2021-12-20 00:00:00
getlast1WeekEndTime: 2021-12-27 00:00:00
二.java获取今天是第几周,ISO周数
static SimpleDateFormat df_yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
public static int getWeekYearISO(String today) throws ParseException {
Date date = df_yyyyMMdd.parse(today);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setMinimalDaysInFirstWeek(4);
calendar.setTime(date);
int w=calendar.get(Calendar.WEEK_OF_YEAR);
System.out.println(w);
return w;
}
获取周开始结束时间:
static String getWeekStartTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = f1.parse(Strdate);
int weekOfYear= getWeekYearISO(Strdate);
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要减少1,且周日=7
c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1);
c2.set(Calendar.HOUR_OF_DAY, 0);
c2.set(Calendar.MINUTE, 0);
c2.set(Calendar.SECOND, 0);
String starT=f1.format(c2.getTime());
System.out.println("week start time:"+starT);
return starT;
}
static String getWeekEndTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = f1.parse(Strdate);
int weekOfYear= getWeekYearISO(Strdate);
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
int dayOfWeek=c2.get(Calendar.DAY_OF_WEEK)-1==0?7:c2.get(Calendar.DAY_OF_WEEK)-1;//默认周日=1,但周一开始需要减少1,且周日=7
c2.add(Calendar.DAY_OF_WEEK, -dayOfWeek+1+7);
c2.set(Calendar.HOUR_OF_DAY, 0);
c2.set(Calendar.MINUTE, 0);
c2.set(Calendar.SECOND, 0);
String starT=f1.format(c2.getTime());
System.out.println("week start time:"+starT);
return starT;
}
static String getlast1WeekStartTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String starT=getWeekStartTime(Strdate);
Date d1 = f1.parse(starT);
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
c2.add(Calendar.DAY_OF_YEAR, -1);//开始时间的1天前
String last1DayOfstarT=f1.format(c2.getTime());
String last1WeekstarT=getWeekStartTime(last1DayOfstarT);
return last1WeekstarT;
}
static String getlast1WeekEndTime(String Strdate) throws ParseException{
SimpleDateFormat f1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String starT=getWeekStartTime(Strdate);
return starT;
}