package com.zy.crm.manager.utils; import javax.xml.crypto.Data; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.*; public class TimeCalculatorUtils { //获取当前时间的小时数(24小时制): public static int nowTimeHour(){ // 获取当前时间戳 long timestamp = System.currentTimeMillis(); // 创建Date对象,并设置时间戳 Date date = new Date(timestamp); // 创建TimeZone对象,设置为中国北京时间 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); // 创建Calendar对象,并设置时区 // 注意:Calendar类中的月份是从0开始的,所以需要减去1 java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone); calendar.setTime(date); // 获取当前小时数(24小时制) return calendar.get(java.util.Calendar.HOUR_OF_DAY); } //获取当天小时数(24小时制)中国北京时间: public static int timeTimeHour(Date date){ // 创建TimeZone对象,设置为中国北京时间 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); // 创建Calendar对象,并设置时区 // 注意:Calendar类中的月份是从0开始的,所以需要减去1 java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone); calendar.setTime(date); // 获取当前小时数(24小时制) return calendar.get(java.util.Calendar.HOUR_OF_DAY); } //获取前一天的日期(日期天数减一) public static Date timeYesterday(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); return calendar.getTime(); } //获取七天前的日期(日期天数减七) public static Date timeFrontSevenYesterday(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -7); return calendar.getTime(); } //获取七天后的日期(日期天数加七) public static Date timeAfterSevenYesterday(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, 7); return calendar.getTime(); } //获取相差n天的日期(日期天数加N) public static Date timeYesterdayN(Date date,int day){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, day); return calendar.getTime(); } //获取年月日 public static String timeYestMonthDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始,需要加1 int day = calendar.get(Calendar.DAY_OF_MONTH); return year+"年"+month+"月"+day+"日"; } //获取年 public static int timeYest(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } //获取月 public static int timeMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } //获取日 public static int timeDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH); } //获取年差异 public static int DifferenceYest(Date startDay,Date endDay){ int startYest = timeYest(startDay); int endYest = timeYest(endDay); return endYest-startYest; } //获取月差异 public static int DifferenceMonth(Date startDay,Date endDay){ int startMonth = timeMonth(startDay); int endMonth = timeMonth(endDay); return endMonth-startMonth; } //获取天差异 public static int DifferenceDayInt(Date startDay,Date endDay){ return DifferenceDayLong(startDay,endDay).intValue(); } //获取天差异 public static Long DifferenceDayLong(Date startDay,Date endDay){ LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay)); LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay)); return ChronoUnit.DAYS.between(a, b)+1; } //获取天差异 public static Double DifferenceDayMorningAfternoon(Date startDay,Date endDay,int startTime,int endTime){ double between = DifferenceDayLong(startDay, endDay).doubleValue(); if (startTime==2){ between = between-0.5; } if (endTime == 1){ between = between-0.5; } return between; } public static boolean CompareData(Date startDay,Date endDay){ // 将日期字符串解析为LocalDate对象 LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay)); LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay)); // 比较日期 if (a.isAfter(b)) { return false; } else if (a.isBefore(b)) { return true; } else { return true; } } //java.time.LocalDate 转换为 java.util.Date; public static Date DateLocalDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } //获取现在日期是当月第几周 public static int WeeklyNowMonth(Date date) { // LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); WeekFields weekFields = WeekFields.of(Locale.getDefault()); int weekOfMonth = currentDate.get(weekFields.weekOfMonth()); return weekOfMonth; } //限制两个日期是周一和周末 工作日 周一到周六 public static void WeeklySix(Date date) { // LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一 LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); System.out.println("当前日期 " + startDate + " 周"); LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天 System.out.println("当前日期加上6天是 " + endDate + " 周"); // 如果开始日期不是周一,则将它调整到下一个周一 if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } // 如果结束日期不是周末(即周六或周日),则将它调整到下一个周末 if (endDate.getDayOfWeek() != DayOfWeek.SATURDAY && endDate.getDayOfWeek() != DayOfWeek.SUNDAY) { endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); } // 确保两个日期之间相隔七天 while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) { startDate = startDate.plus(7, ChronoUnit.DAYS); } System.out.println("开始日期:" + startDate); System.out.println("结束日期:" + endDate); } //限制两个日期是周一和周末 周一到周日 public static List WeeklySeven(Date date) { // LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一 LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // System.out.println("当前日期 " + startDate + " 周"); LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天 // System.out.println("当前日期加上6天是 " + endDate + " 周"); // 如果开始日期不是周一,则将它调整到下一个周一 if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } // 如果结束日期不是周日,则将它调整到下一个周日 if (endDate.getDayOfWeek() != DayOfWeek.SUNDAY) { endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); } // 确保两个日期之间相隔七天 while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) { startDate = startDate.plus(7, ChronoUnit.DAYS); } List dateList = new ArrayList<>(); dateList.add(DateLocalDate(startDate)); dateList.add(DateLocalDate(endDate)); return dateList; // System.out.println("开始日期:" + startDate); // System.out.println("结束日期:" + endDate); } //判断是不是周一 public static boolean WeeklyOneSign(Date date) { LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // 判断是不是周一 if (localDate.getDayOfWeek() != DayOfWeek.MONDAY) { return false; } return true; } //获取本周周一 public static Date WeeklyMonday (Date date) { LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // 判断是不是周一 则将它调整到下周周一 localDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); // 将LocalDate转换为Date Date monday = DateLocalDate(localDate); // 则将它调整到本周周一 return timeFrontSevenYesterday(monday); } //获取当前日期所在的周一及周日时间 public static List WeeklyMondayAndSundayNow(Date date) { Date nowMonday = WeeklyMonday(date); return WeeklySeven(nowMonday); } //获取当前日期上一周周一及周日时间 public static List WeeklyMondayAndSundayFront(Date date) { Date nowMonday = WeeklyMonday(date); Date frontSevenYesterday = timeFrontSevenYesterday(nowMonday); return WeeklySeven(frontSevenYesterday); } //获取当前日期下一周周一及周日时间 public static List WeeklyMondayAndSundayAfter(Date date) { Date nowMonday = WeeklyMonday(date); Date afterSevenYesterday = timeAfterSevenYesterday(nowMonday); return WeeklySeven(afterSevenYesterday); } //获取周一到周末 public static List WeeklyDays(Date date){ Date nowMonday = WeeklyMonday(date); List dateList = new ArrayList<>(); dateList.add(nowMonday); for (int i = 1; i<7 ; i++){ dateList.add(timeYesterdayN(nowMonday,i)); } return dateList; } public static void main(String[] args) { Date now = new Date(); //本周 List dateList = WeeklyMondayAndSundayNow(now); for (Date date : dateList){ System.out.println("------------------------------"); System.out.println(date); } //上周 List dateList1 = WeeklyMondayAndSundayFront(now); for (Date date : dateList1){ System.out.println("------------------------------"); System.out.println(date); } //下周 List dateList2 = WeeklyMondayAndSundayAfter(now); for (Date date : dateList2){ System.out.println("------------------------------"); System.out.println(date); } //周 List dateList3 = WeeklyDays(now); for (Date date : dateList3){ System.out.println("------------------------------"); System.out.println(date); } } }