输入某年,得到某年的第一天和最后一天
输入某年某季度,得到某年某季度的第一天和最后一天
......
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static void main(String[] args) {
// 周
String weekStart = getWeekString(2023, 1, true);
String weekEnd = getWeekString(2023, 1, false);
System.out.println(weekStart);
System.out.println(weekEnd);
// 月
String monthStart = getMonthString(2023, 2, true);
String monthEnd = getMonthString(2023, 2, false);
System.out.println(monthStart);
System.out.println(monthEnd);
// 季度
String quarterStart = getQuarterString(2023, 2, true);
String quarterEnd = getQuarterString(2023, 2, false);
System.out.println(quarterStart);
System.out.println(quarterEnd);
// 年
String yearStart = getYearString(2023, true);
String yearEnd = getYearString(2023, false);
System.out.println(yearStart);
System.out.println(yearEnd);
}
/**
* 获取某年某季度的时间跨度
* @param year 年份
* @param quarter 季度
* @param isStartTime 是否是开始时间
* @return String
*/
public static String getQuarterString(int year, int quarter, boolean isStartTime) {
int startMonth = (quarter - 1) * 3;
// 根据月获取开始时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, startMonth);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date start = calendar.getTime();
int lastMonth = quarter * 3 - 1;
calendar.set(Calendar.MONTH, lastMonth);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date end = calendar.getTime();
String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
if (isStartTime) {
return startTime;
} else {
return endTime;
}
}
/**
* 获取某年的时间跨度
* @param year 年份
* @param isStartTime 是否是开始时间
* @return String
*/
public static String getYearString(int year, boolean isStartTime){
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
Date start = calendar.getTime();
calendar.roll(Calendar.DAY_OF_YEAR, - 1 );
Date end = calendar.getTime();
String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
if (isStartTime) {
return startTime;
} else {
return endTime;
}
}
/**
* 获取某年某月的时间跨度
*
* @param year 年份
* @param month 月份
* @param isStartTime 是否是开始时间
* @return String
*/
// 获取指定年指定月的开始天数和结束天数
public static String getMonthString(int year, int month, boolean isStartTime) {
// 获取当前分区的日历信息(这里可以使用参数指定时区)
Calendar calendar = Calendar.getInstance();
// 设置年
calendar.set(Calendar.YEAR, year);
// 设置月,月份从0开始
calendar.set(Calendar.MONTH, month - 1);
// 设置为指定月的第一天
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取指定月第一天的时间
Date start = calendar.getTime();
// 设置日历天数为当前月实际天数的最大值,即指定月份的最后一天
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
// 获取最后一天的时间
Date end = calendar.getTime();
// 设置返回信息,返回样式根据需求自行格式化
String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
if (isStartTime) {
return startTime;
} else {
return endTime;
}
}
/**
* 获取某年某周的时间跨度
*
* @param year 年份
* @param week 周数
* @param isStartTime 是否是开始时间
* @return String
*/
public static String getWeekString(int year, int week, boolean isStartTime) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
// 设置星期一为一周开始的第一天
calendar.setFirstDayOfWeek(Calendar.MONDAY);
// 可以不用设置
calendar.setMinimalDaysInFirstWeek(4);
// 获得当前的年
int weekYear = calendar.get(Calendar.YEAR);
// 获得指定年的第几周的开始日期(星期几)
calendar.setWeekDate(weekYear, week, Calendar.MONDAY);
Date start = calendar.getTime();
// 获得指定年的第几周的结束日期(星期几)
calendar.setWeekDate(weekYear, week, Calendar.SUNDAY);
Date end = calendar.getTime();
String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
if (isStartTime) {
return startTime;
} else {
return endTime;
}
}
}
测试结果:
// 周
2023-01-02 00:00:00
2023-01-08 23:59:59
// 月
2023-02-01 00:00:00
2023-02-28 23:59:59
// 季度
2023-04-01 00:00:00
2023-06-30 23:59:59
// 年
2023-01-01 00:00:00
2023-12-31 23:59:59