
Time.java
package org.example.testcalendar;
public class Time {
public static final long SEC = 1000L;
public static final long MIN = 60 * SEC;
public static final long HOUR = 60 * MIN;
public static final long DAY = 24 * HOUR;
public static final long WEEK = 7 * DAY;
}
CalendarService.java
package org.example.testcalendar;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarService {
public static int getCurMonthTotalDays() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
public static long getNextNearWeekDayTime(String timeFormat, int weekDay) {
String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(yyyyMMddHHmmss);
// 策划配置的开始时间
long confStartTime = -1;
try {
timeFormat = timeFormat.replace(":", ":");
confStartTime = sdf.parse(timeFormat).getTime();
} catch (ParseException e) {
throw new RuntimeException(e);
}
// 得到配置的时间
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(confStartTime);
int dayIndex = -1;
if (weekDay == 7) {
dayIndex = 1;
} else {
dayIndex = weekDay + 1;
}
// 设置为周六,为计算最近的周六做准备
cal.set(Calendar.DAY_OF_WEEK, dayIndex);
long startInWeekDayTime = cal.getTimeInMillis();
// 保证实际开始时间一定在配置时间之后
if (startInWeekDayTime < confStartTime) {
startInWeekDayTime += Time.WEEK;
}
return startInWeekDayTime;
}
}
Main.java
package org.example.testcalendar;
public class Main {
public static void main(String[] args) {
int curMonthTotalDays = CalendarService.getCurMonthTotalDays();
System.out.println("这个月天数=" + curMonthTotalDays);
long realStartWeekDayTime = CalendarService.getNextNearWeekDayTime("2021-09-29 00:00:00", 6);
System.out.println(realStartWeekDayTime);
}
}