目录
获取日期所在年中的周数
/**
* 获取日期所在一年中的周数
* @param time
* @return
*/
public static String getDayInWeek(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(time);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
String i = calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.WEEK_OF_YEAR);
return i;
}
结果:
String dayInWeek = DateUtils.getDayInWeek("2022-06-28");
System.out.println(dayInWeek); //2022-27
计算两个时间内所有的月份
/**
* 计算两个时间中所有的月份
* @param date1 开始时间
* @param date2 结束时间
* @return
* @throws ParseException
*/
public static List<String> getMonths(String date1, String date2) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date parse = sdf.parse(date1);
Date parse2 = sdf.parse(date2);
List<String> dateList = new ArrayList<>();
Calendar c1=Calendar.getInstance();
c1.setTime(parse);
//转为周一
int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
c1.set(year, month, 1, 0, 0, 0);
Calendar c2=Calendar.getInstance();
c2.setTime(parse2);
int weekYear2 = c2.get(Calendar.YEAR);
int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
while (true) {
int tempMonth = c1.get(Calendar.MONTH);
String date = c1.getWeekYear() + "-" + ((tempMonth + 1) <= 9 ? "0" + (tempMonth + 1) : tempMonth + 1);
dateList.add(date);
//下一个月<结束日期
c1.set(Calendar.MONTH, tempMonth +1);
if(c1.getTimeInMillis()>=c2.getTimeInMillis()){
break;
}
}
return dateList;
}
结果:
List<String> months = DateUtils.getMonths("2022-05-28", "2022-06-28");
System.out.println(months);//[2022-05, 2022-06]
计算两个时间内所有的周数
/**
* 计算两个时间内 所有的周数
* @param date1
* @param date2
* @return
* @throws ParseException
*/
public static List<String> getWeeks(String date1, String date2) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date parse = sdf.parse(date1);
Date parse2 = sdf.parse(date2);
List<String> dateList = new ArrayList<>();
Calendar c1=Calendar.getInstance();
c1.setTime(parse);
//转为周一
int weekYear = c1.get(Calendar.YEAR);
int weekOfYear = c1.get(Calendar.WEEK_OF_YEAR);
c1.setWeekDate(weekYear, weekOfYear, Calendar.MONDAY);
Calendar c2=Calendar.getInstance();
c2.setTime(parse2);
int weekYear2 = c2.get(Calendar.YEAR);
int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
while (true) {
int weekNum = c1.get(Calendar.WEEK_OF_YEAR);
dateList.add(c1.getWeekYear() + "-" + (weekNum > 9 ? weekNum : "0" + weekNum));
if (c1.getTimeInMillis() >= c2.getTimeInMillis()) {
break;
}
//增加7天
c1.setTimeInMillis(c1.getTimeInMillis()+1000*60*60*24*7);
}
return dateList;
}
结果:
List<String> weeks = DateUtils.getWeeks("2022-05-28", "2022-06-28");
System.out.println(weeks);
//[2022-22, 2022-23, 2022-24, 2022-25, 2022-26, 2022-27]
计算两个时间内所有日期
/**
* 计算两个时间内所有日期
* @param date1
* @param date2
* @return
* @throws ParseException
*/
public static List<String> getDays(String date1, String date2) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Long startTime = sdf.parse(date1).getTime();
Long endTime = sdf.parse(date2).getTime();
List<String> dateList = new ArrayList<String>();
Long oneDay = 1000 * 60 * 60 * 24l;
Long time = startTime;
while (time <= endTime) {
Date d = new Date(time);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String date=df.format(d);
dateList.add(date);
time += oneDay;
}
return dateList;
}
结果:
List<String> days = DateUtils.getDays("2022-05-28", "2022-06-28");
System.out.println(days);
//[2022-05-28, 2022-05-29, 2022-05-30, 2022-05-31, 2022-06-01, 2022-06-02, 2022-06-03, 2022-06-04, 2022-06-05, 2022-06-06, 2022-06-07, 2022-06-08, 2022-06-09, 2022-06-10, 2022-06-11, 2022-06-12, 2022-06-13, 2022-06-14, 2022-06-15, 2022-06-16, 2022-06-17, 2022-06-18, 2022-06-19, 2022-06-20, 2022-06-21, 2022-06-22, 2022-06-23, 2022-06-24, 2022-06-25, 2022-06-26, 2022-06-27, 2022-06-28]
本文档展示了如何使用Java编程计算两个日期范围内的周数、月份列表和完整日期列表。getDayInWeek方法计算给定日期所在的年周数,getMonths和getWeeks分别返回两个时间段内所有的月份和周数,而getDays则列出所有日期。

3407

被折叠的 条评论
为什么被折叠?



