From 3521a67a117547851334c2de8ff2d36eac0734e8 Mon Sep 17 00:00:00 2001 From: xyiege Date: Mon, 17 Oct 2022 21:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=8640=E4=B8=AA=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E7=9A=84=E6=97=A5=E6=9C=9F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/chjyj/szwh/utils/DateUtils.java | 26 ++++--- .../java/cn/chjyj/szwh/utils/WorkDayUtil.java | 71 +++++++++++++++++++ src/test/java/cn/chjyj/szwh/NewTest.java | 11 +-- urls.md | 6 +- 4 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 src/main/java/cn/chjyj/szwh/utils/WorkDayUtil.java diff --git a/src/main/java/cn/chjyj/szwh/utils/DateUtils.java b/src/main/java/cn/chjyj/szwh/utils/DateUtils.java index 001b008..3f79654 100644 --- a/src/main/java/cn/chjyj/szwh/utils/DateUtils.java +++ b/src/main/java/cn/chjyj/szwh/utils/DateUtils.java @@ -15,17 +15,18 @@ import java.util.Date; public class DateUtils { /** * 时间转换成时间戳,参数和返回值都是字符串 - * @param s + * + * @param s * @return res * @throws ParseException */ - public static long dateToStamp(String s) { + public static long dateToStamp(String s) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = simpleDateFormat.parse(s); long ts = date.getTime(); return ts; - }catch (ParseException ex){ + } catch (ParseException ex) { ex.printStackTrace(); } return 0l; @@ -49,6 +50,7 @@ public class DateUtils { /** * 获取一个月的总天数 + * * @param date * @return */ @@ -60,18 +62,25 @@ public class DateUtils { /** * 指定日期的前后几天 工作日 + * * @param oneday 特定日期 * @param amount 天数 前几天参数amount为负整数 * @return */ - public static Date daysAgoOrAfter(Date oneday,int amount){ + public static Date daysAgoOrAfter(Date oneday, int amount) { Calendar mon = Calendar.getInstance(); mon.setTime(oneday); //如果今天是周六或周日 - if (Calendar.SATURDAY == mon.get(Calendar.SATURDAY) || Calendar.SUNDAY == mon.get(Calendar.SUNDAY)) { - amount=amount+1; +// if (Calendar.SATURDAY == mon.get(Calendar.SATURDAY) || Calendar.SUNDAY == mon.get(Calendar.SUNDAY)) { +// amount=amount+1; +// } + // 最后得到的日子如果是周日 周六 + if (Calendar.SATURDAY == mon.get(Calendar.SATURDAY)) { + amount+=2; + } + if (Calendar.SUNDAY == mon.get(Calendar.SUNDAY)) { + amount+=1; } - // 逢周六周日,日期延后一天 for (int i = 0; i < amount; i++) { mon.set(Calendar.DATE, mon.get(Calendar.DATE) + 1); @@ -86,10 +95,11 @@ public class DateUtils { /** * 日期本地化 * note:Date对象表示特定的日期和时间,而LocalDate(Java8)对象只包含没有任何时间信息的日期。 + * * @param date * @return */ - public static LocalDateTime convertDateToLocalDateTime(Date date){ + public static LocalDateTime convertDateToLocalDateTime(Date date) { // 系统时区 ZoneId zoneId = ZoneId.systemDefault(); Instant instant = date.toInstant(); diff --git a/src/main/java/cn/chjyj/szwh/utils/WorkDayUtil.java b/src/main/java/cn/chjyj/szwh/utils/WorkDayUtil.java new file mode 100644 index 0000000..bcec87a --- /dev/null +++ b/src/main/java/cn/chjyj/szwh/utils/WorkDayUtil.java @@ -0,0 +1,71 @@ +package cn.chjyj.szwh.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * 工作日工具类 + */ +public class WorkDayUtil { + /** + * 日期格式 + */ + public static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd"); + + /** + * 获取工作日时间 + * + * @param startDate 起始时间 + * @param num num个工作日 + * @return + */ + public static Date getWorkDay(Date startDate, int num) { + Date tomorrow = null; + int delay = 0; + while (delay < num-1) { + tomorrow = getTomorrow(startDate); + if (!isWeekend(SDF.format(tomorrow))) { + delay++; + } + startDate = tomorrow; + } + return startDate; + } + + /** + * 判断日期字符串是否为周末 + * + * @param dateString 日期字符串 + * @return + */ + private static boolean isWeekend(String dateString){ + boolean zm=false; + try { + Date date = SDF.parse(dateString); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + //return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY; + if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){ + zm=true; + } + }catch (ParseException ex){ + ex.printStackTrace(); + } + return zm; + } + + /** + * 获取tomorrow的日期 + * + * @param startDate 起始时间 + * @return + */ + private static Date getTomorrow(Date startDate) { + Calendar cal = Calendar.getInstance(); + cal.setTime(startDate); + cal.add(Calendar.DAY_OF_MONTH, +1); + return cal.getTime(); + } +} diff --git a/src/test/java/cn/chjyj/szwh/NewTest.java b/src/test/java/cn/chjyj/szwh/NewTest.java index 60d2e0b..99f1311 100644 --- a/src/test/java/cn/chjyj/szwh/NewTest.java +++ b/src/test/java/cn/chjyj/szwh/NewTest.java @@ -3,6 +3,7 @@ package cn.chjyj.szwh; import cn.chjyj.szwh.mapper.FestivalsMapper; import cn.chjyj.szwh.utils.DateUtils; import cn.chjyj.szwh.utils.SzFileUtils; +import cn.chjyj.szwh.utils.WorkDayUtil; import com.alibaba.fastjson2.JSONObject; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -106,13 +107,15 @@ public class NewTest { public void n2test(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { - Date startd = sdf.parse("2022-10-18"); - Date afdate = DateUtils.daysAgoOrAfter(startd,5); - System.out.println(sdf.format(afdate)); - + Date startd = sdf.parse("2022-10-17"); + Date afdate =WorkDayUtil.getWorkDay(startd,40); + //Date afdate = DateUtils.daysAgoOrAfter(startd,40); + System.out.println("40工作日后的日期:"+sdf.format(afdate)); }catch (Exception ex){ ex.printStackTrace(); } + + } /** diff --git a/urls.md b/urls.md index 5a9bc9a..17bc3cd 100644 --- a/urls.md +++ b/urls.md @@ -40,4 +40,8 @@ 19. [SpringBoot设置动态定时任务](blog.csdn.net/wl_Honest/article/details/123654621) -20. [java取n个工作日后的日期](https://www.cnblogs.com/yadongliang/p/9549349.html) \ No newline at end of file +20. [java取n个工作日后的日期](https://www.cnblogs.com/yadongliang/p/9549349.html) + +21. [JAVA获取N个工作日后的时间的工具类、考虑上班时间、时区](https://blog.csdn.net/qq_37136334/article/details/121381277) + +22.[Java获取n天后的工作日时间](https://www.minedeed.com/Java/13.html) \ No newline at end of file