一个统计时间周期的工具类,包含获得给定时间一天、一周、一月、一年的开始和结束时间,以及时间格式化为字符串,字符串解析为时间。
/**
* 时间处理工具类
* @author 别人家的孩子e
*/
public class TimeUtil {
/**
* 按给定的格式,解析日期字符串
*/
public static LocalDateTime convertDatetimeString(String date,String format){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(date,formatter);
}
/**
* 按给定的格式,解析日期字符串
*/
public static LocalDate convertDateString(String date,String format){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(date,formatter);
}
/**
* 按给定的格式,格式化给定的日期
*/
public static String formatTime(LocalDateTime date,String format){
return DateTimeFormatter.ofPattern(format).format(date);
}
/**
* 按给定的格式,格式化给定的日期
*/
public static String formatTime(LocalDate date,String format){
return DateTimeFormatter.ofPattern(format).format(date);
}
/**
* 获得给定天的开始
*/
public static LocalDateTime getDayStart(LocalDateTime date){
return LocalDateTime.of(date.toLocalDate(),LocalTime.MIN);
}
/**
* 获得给定天的结束
*/
public static LocalDateTime getDayEnd(LocalDateTime date){
return LocalDateTime.of(date.toLocalDate(),LocalTime.MAX);
}
/**
* 获得日期所在周开始, 周期为周一 - 周日
*/
public static LocalDateTime getChinaWeekStart(LocalDateTime date){
return LocalDateTime.of(date.toLocalDate().with(DayOfWeek.MONDAY),LocalTime.MIN);
}
/**
* 获得日期所在周结束, 周期为周一 - 周日
*/
public static LocalDateTime getChinaWeekEnd(LocalDateTime date){
return LocalDateTime.of(date.toLocalDate().with(DayOfWeek.SUNDAY),LocalTime.MAX);
}
/**
* 获得日期所在周开始, 周期为周日 - 周六
*/
public static LocalDateTime getWeekStart(LocalDateTime date){
//获得当前日期所在周的周日
LocalDate sunday = date.toLocalDate().with(DayOfWeek.SUNDAY);
if(sunday.equals(date.toLocalDate())){
//当前就是周日
return LocalDateTime.of(sunday,LocalTime.MIN);
}else {
//获取上周日开始
return LocalDateTime.of(date.minusWeeks(1).with(DayOfWeek.SUNDAY).toLocalDate(),LocalTime.MIN);
}
}
/**
* 获得日期所在周结束, 周期为周日 - 周六
*/
public static LocalDateTime getWeekEnd(LocalDateTime date){
//获得当前日期所在周的周日
LocalDate sunday = date.toLocalDate().with(DayOfWeek.SUNDAY);
if (sunday.equals(date.toLocalDate())){
//获得下周六
return LocalDateTime.of(date.plusWeeks(1).with(DayOfWeek.SATURDAY).toLocalDate(),LocalTime.MAX);
}else {
//获得本周六
return LocalDateTime.of(date.with(DayOfWeek.SATURDAY).toLocalDate(),LocalTime.MAX);
}
}
/**
* 获得日期所在月开始
*/
public static LocalDateTime getMonthStart(LocalDateTime date){
LocalDate time = date.toLocalDate().with(TemporalAdjusters.firstDayOfMonth());
return LocalDateTime.of(time,LocalTime.MIN);
}
/**
* 获得日期所在月结束
*/
public static LocalDateTime getMonthEnd(LocalDateTime date){
LocalDate time = date.toLocalDate().with(TemporalAdjusters.lastDayOfMonth());
return LocalDateTime.of(time,LocalTime.MAX);
}
/**
* 获得日期所在年开始
*/
public static LocalDateTime getYearStart(LocalDateTime date){
LocalDate time = date.toLocalDate().with(TemporalAdjusters.firstDayOfYear());
return LocalDateTime.of(time,LocalTime.MIN);
}
/**
* 获得日期所在年结束
*/
public static LocalDateTime getYearEnd(LocalDateTime date){
LocalDate time = date.toLocalDate().with(TemporalAdjusters.lastDayOfYear());
return LocalDateTime.of(time,LocalTime.MAX);
}
public static void main(String[] args) {
//指定年月日时分秒
LocalDateTime dateTime = LocalDateTime.of(2024, 1, 4, 11, 12, 12);
//指定年月日
LocalDate date = LocalDate.of(2023, 11, 11);
//dateTime减去一天
System.out.println(formatTime(dateTime.plusDays(-1),"yyyy-MM-dd HH:mm:ss"));
//dateTime增加一周
System.out.println(formatTime(dateTime.plusWeeks(1),"yyyy-MM-dd HH:mm:ss"));
//date减去一月
System.out.println(formatTime(date.plusMonths(-1),"yyyy-MM-dd"));
//date增加一年
System.out.println(formatTime(date.plusYears(1),"yyyy-MM-dd"));
}
}