1、Java1.8引入的时间调节器类:TemporalAdjusters
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.ChronoUnit;
/**
* @Auther:
* @Description: 时间调节器类
*/
public class TemporalAdjusterTest {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
//获取当月第一天
System.out.println("当月第一天:"+now.with(TemporalAdjusters.firstDayOfMonth()));
//获取下月第一天
System.out.println("下月第一天:"+now.with(TemporalAdjusters.firstDayOfNextMonth()));
//获取明年第一天
System.out.println("明年第一天:"+now.with(TemporalAdjusters.firstDayOfNextYear()));
//获取本年第一天
System.out.println("本年第一天:"+now.with(TemporalAdjusters.firstDayOfYear()));
//获取当月最后一天
System.out.println("当月最后一天:"+now.with(TemporalAdjusters.lastDayOfMonth()));
//获取本年最后一天
System.out.println("本年最后一天:"+now.with(TemporalAdjusters.lastDayOfYear()));
//获取当月第三周星期五
System.out.println("当月第三周星期五:"+now.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.FRIDAY)));
//获取上周一
System.out.println("上周一:"+now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
//获取下周日
System.out.println("下周日:"+now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));
//minus 获取上个月最后一天
System.out.println("上个月最后一天:"+now.minus(1, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()));
//plus 获取下个月最后一天
System.out.println("下个月最后一天:"+now.plus(1, ChronoUnit.MONTHS).with(TemporalAdjusters.lastDayOfMonth()));
}
}
2、自定义的
/**
* 获取指定日期当月的第一天
* @param dateStr
* @param format
* @return
*/
public static String getFirstDayOfGivenMonth(String dateStr,String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, 0);
return sdf.format(calendar.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取指定日期下个月的第一天
* @param dateStr
* @param format
* @return
*/
public static String getFirstDayOfNextMonth(String dateStr,String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, 1);
return sdf.format(calendar.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 把指定日期的年份 + 1,月日不变
* @param dateStr
* @param format
* @return
*/
public static String getAppointDayOfNextYear(String dateStr,String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.YEAR, 1);
return sdf.format(calendar.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args){
System.out.println(getAppointDayOfNextYear("2020-01-01", "yyyy-MM-dd"));
System.out.println(getFirstDayOfNextMonth("2022-12-04", "yyyy-MM-dd"));
System.out.println(getFirstDayOfGivenMonth("2021-02-27", "yyyy-MM-dd"));
}
3、Hutool工具包:DateUtil
具体使用可参考官方API:Hutool参考文档