package com.zy.asrs.utils; 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 Calendar calendar = Calendar.getInstance(timeZone); calendar.setTime(date); // 获取当前小时数(24小时制) return calendar.get(Calendar.HOUR_OF_DAY); } //获取当天小时数(24小时制)中国北京时间: public static int timeTimeHour(Date date){ // 创建TimeZone对象,设置为中国北京时间 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); // 创建Calendar对象,并设置时区 // 注意:Calendar类中的月份是从0开始的,所以需要减去1 Calendar calendar = Calendar.getInstance(timeZone); calendar.setTime(date); // 获取当前小时数(24小时制) return calendar.get(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 Long differenceInMilliseconds(Date startDay, Date endDay) { if (startDay == null || endDay == null) { throw new IllegalArgumentException("Dates cannot be null"); } // 获取毫秒差异 return endDay.getTime() - startDay.getTime(); } //获秒差异 public static long differenceInSeconds(Date startDay, Date endDay) { if (startDay == null || endDay == null) { throw new IllegalArgumentException("Dates cannot be null"); } // 获取毫秒差异,并转换为秒 long millisecondsDifference = endDay.getTime() - startDay.getTime(); return millisecondsDifference / 1000; } 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 WeeklyNowMonthDay(Date date) { // int day = timeDay(date); // if (day<7){ // if (WeeklyNowMonth(WeeklyMonday(date))>2){ // return 1; // } // } return WeeklyNowMonth(WeeklyMonday(date)); } 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 List WeeklyListDays(List dates){ Date date = dates.get(0); 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(); int weeklyNowMonth = WeeklyNowMonthDay(now); System.out.println("当前日期是第 " + weeklyNowMonth + " 周"); LocalDate startDate1 = LocalDate.of(2024, 2, 29); int weeklyNowMonth1 = WeeklyNowMonthDay(DateLocalDate(startDate1)); System.out.println("当前日期是第 " + weeklyNowMonth1 + " 周"); LocalDate startDate2 = LocalDate.of(2024, 3, 5); int weeklyNowMonth2 = WeeklyNowMonthDay(DateLocalDate(startDate2)); System.out.println("当前日期是第 " + weeklyNowMonth2 + " 周"); LocalDate startDate3 = LocalDate.of(2024, 3, 10); int weeklyNowMonth3 = WeeklyNowMonthDay(DateLocalDate(startDate3)); System.out.println("当前日期是第 " + weeklyNowMonth3 + " 周"); LocalDate startDate4 = LocalDate.of(2024, 3, 31); int weeklyNowMonth4 = WeeklyNowMonthDay(DateLocalDate(startDate4)); System.out.println("当前日期是第 " + weeklyNowMonth4 + " 周"); LocalDate startDate5 = LocalDate.of(2024, 4, 1); int weeklyNowMonth5 = WeeklyNowMonthDay(DateLocalDate(startDate5)); System.out.println("当前日期是第 " + weeklyNowMonth5 + " 周"); LocalDate startDate6 = LocalDate.of(2024, 4, 7); int weeklyNowMonth6 = WeeklyNowMonthDay(DateLocalDate(startDate6)); System.out.println("当前日期是第 " + weeklyNowMonth6 + " 周"); } // 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); // } // } }