From 861efe8a7ddc3d52dddbcce83d3a43f476a7418c Mon Sep 17 00:00:00 2001 From: LSH Date: 星期二, 26 三月 2024 14:34:29 +0800 Subject: [PATCH] #完善工具类 --- src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java | 301 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 261 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java b/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java index 3def1fc..b0a0cb2 100644 --- a/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java +++ b/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java @@ -1,17 +1,18 @@ package com.zy.crm.manager.utils; +import javax.xml.crypto.Data; +import java.time.DayOfWeek; import java.time.LocalDate; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; +import java.time.ZoneId; import java.time.temporal.ChronoUnit; -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; +import java.time.temporal.TemporalAdjusters; +import java.time.temporal.WeekFields; +import java.util.*; public class TimeCalculatorUtils { - public static int getTimeHour(){ - //濡備綍鑾峰彇褰撳墠鏃堕棿鐨勫皬鏃舵暟锛�24灏忔椂鍒讹級锛� + //鑾峰彇褰撳墠鏃堕棿鐨勫皬鏃舵暟锛�24灏忔椂鍒讹級锛� + public static int nowTimeHour(){ // 鑾峰彇褰撳墠鏃堕棿鎴� long timestamp = System.currentTimeMillis(); @@ -30,7 +31,8 @@ return calendar.get(java.util.Calendar.HOUR_OF_DAY); } - public static int getTimeHour(Date date){ + //鑾峰彇褰撳ぉ灏忔椂鏁帮紙24灏忔椂鍒讹級涓浗鍖椾含鏃堕棿锛� + public static int timeTimeHour(Date date){ // 鍒涘缓TimeZone瀵硅薄锛岃缃负涓浗鍖椾含鏃堕棿 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); @@ -43,14 +45,40 @@ return calendar.get(java.util.Calendar.HOUR_OF_DAY); } - public static Date getYesterday(Date date){ + //鑾峰彇鍓嶄竴澶╃殑鏃ユ湡锛堟棩鏈熷ぉ鏁板噺涓�锛� + 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 String getYestMonthDay(Date date){ + //鑾峰彇涓冨ぉ鍓嶇殑鏃ユ湡锛堟棩鏈熷ぉ鏁板噺涓冿級 + 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); @@ -60,51 +88,244 @@ return year+"骞�"+month+"鏈�"+day+"鏃�"; } - public static int getDifferenceDayInt(Date startDay,Date endDay){ - return getDifferenceDayLong(startDay,endDay).intValue(); + //鑾峰彇骞� + public static int timeYest(Date date){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + + return calendar.get(Calendar.YEAR); } - public static Long getDifferenceDayLong(Date startDay,Date endDay){ - LocalDate localDateA = dateToLocalDate(startDay); - LocalDate localDateB = dateToLocalDate(endDay); + //鑾峰彇鏈� + public static int timeMonth(Date date){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); - return getDifferenceDays(localDateA, localDateB); + return calendar.get(Calendar.MONTH) + 1; } - public static Long getDifferenceDayDouble(String startDay,String endDay){ - // 瀹氫箟鏃ユ湡瀛楃涓茬殑鏍煎紡 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝鏈坉鏃hh:mm"); + //鑾峰彇鏃� + 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){ // 灏嗘棩鏈熷瓧绗︿覆瑙f瀽涓篖ocalDate瀵硅薄 - LocalDate dateA = LocalDate.parse(startDay, formatter); - LocalDate dateB = LocalDate.parse(endDay, formatter); + LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay)); + LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay)); - // 璁$畻鏃ユ湡瀵硅薄涔嬮棿鐨勭浉闅斿ぉ鏁� - return ChronoUnit.DAYS.between(dateA, dateB); - - } - - private static String getDatePart(String dateTime) { - int index = dateTime.indexOf(" "); - if (index != -1) { - return dateTime.substring(0, index); + // 姣旇緝鏃ユ湡 + if (a.isAfter(b)) { + return false; + } else if (a.isBefore(b)) { + return true; + } else { + return true; } - return dateTime; } - private static String getTimePart(String dateTime) { - int index = dateTime.indexOf(" "); - if (index != -1) { - return dateTime.substring(index + 1); + //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)); } - return ""; + + // 濡傛灉缁撴潫鏃ユ湡涓嶆槸鍛ㄦ湯锛堝嵆鍛ㄥ叚鎴栧懆鏃ワ級锛屽垯灏嗗畠璋冩暣鍒颁笅涓�涓懆鏈� + 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); } - private static LocalDate dateToLocalDate(Date date) { - return date.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate(); + //闄愬埗涓や釜鏃ユ湡鏄懆涓�鍜屽懆鏈� 鍛ㄤ竴鍒板懆鏃� + public static List<Date> 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<Date> dateList = new ArrayList<>(); + dateList.add(DateLocalDate(startDate)); + dateList.add(DateLocalDate(endDate)); + return dateList; +// System.out.println("寮�濮嬫棩鏈燂細" + startDate); +// System.out.println("缁撴潫鏃ユ湡锛�" + endDate); } - private static long getDifferenceDays(LocalDate dateA, LocalDate dateB) { - return ChronoUnit.DAYS.between(dateA, dateB); + //鍒ゆ柇鏄笉鏄懆涓� + 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)); + // 鍒ゆ柇鏄笉鏄懆涓� 鍒欏皢瀹冭皟鏁村埌涓嬪懆鍛ㄤ竴 + if (WeeklyOneSign(date)) { + localDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); + } + // 灏哃ocalDate杞崲涓篋ate + Date monday = DateLocalDate(localDate); + + // 鍒欏皢瀹冭皟鏁村埌鏈懆鍛ㄤ竴 + Date nowMonday = timeFrontSevenYesterday(monday); + + + return nowMonday; + } + + //鑾峰彇褰撳墠鏃ユ湡鎵�鍦ㄧ殑鍛ㄤ竴鍙婂懆鏃ユ椂闂� + public static List<Date> WeeklyMondayAndSundayNow(Date date) { + Date nowMonday = WeeklyMonday(date); + return WeeklySeven(nowMonday); + } + + //鑾峰彇褰撳墠鏃ユ湡涓婁竴鍛ㄥ懆涓�鍙婂懆鏃ユ椂闂� + public static List<Date> WeeklyMondayAndSundayFront(Date date) { + Date nowMonday = WeeklyMonday(date); + Date frontSevenYesterday = timeFrontSevenYesterday(nowMonday); + return WeeklySeven(frontSevenYesterday); + } + + //鑾峰彇褰撳墠鏃ユ湡涓嬩竴鍛ㄥ懆涓�鍙婂懆鏃ユ椂闂� + public static List<Date> WeeklyMondayAndSundayAfter(Date date) { + Date nowMonday = WeeklyMonday(date); + Date afterSevenYesterday = timeAfterSevenYesterday(nowMonday); + return WeeklySeven(afterSevenYesterday); + } + + //鑾峰彇鍛ㄤ竴鍒板懆鏈� + public static List<Date> WeeklyDays(Date date){ + Date nowMonday = WeeklyMonday(date); + List<Date> 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<Date> dateList = WeeklyMondayAndSundayNow(now); + for (Date date : dateList){ + System.out.println("------------------------------"); + System.out.println(date); + } + //涓婂懆 + List<Date> dateList1 = WeeklyMondayAndSundayFront(now); + for (Date date : dateList1){ + System.out.println("------------------------------"); + System.out.println(date); + } + //涓嬪懆 + List<Date> dateList2 = WeeklyMondayAndSundayAfter(now); + for (Date date : dateList2){ + System.out.println("------------------------------"); + System.out.println(date); + } + //鍛� + List<Date> dateList3 = WeeklyDays(now); + for (Date date : dateList3){ + System.out.println("------------------------------"); + System.out.println(date); + } + } + } -- Gitblit v1.9.1