1.LocalDateTime相关操作:(时间推移、计算两个LocalDateTime之间的时间间隔、转LocalDate),代码如下:

        // 获取LocalDateTime对象String dateTime1 = "2022-08-20 00:00:00";String dateTime2 = "2022-08-20 23:00:00";DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime ldt1 = LocalDateTime.parse(dateTime1, df);LocalDateTime ldt2 = LocalDateTime.parse(dateTime2, df);// ldt1往前推31天,即在原来的基础上-31天LocalDateTime localDateTime = ldt1.minusDays(31);// 输出结果:2022-07-20 00:00:00System.out.println(localDateTime.format(df));// 计算两个LocalDateTime的时间间隔(时分秒),ldt1是开始时间,ldt2是结束时间Duration between = Duration.between(ldt1, ldt2);// 如:ldt1与ldt2间隔多少小时long hours = between.toHours();// 输出结果23System.out.println(hours);// LocalDateTime转LocalDate对象LocalDate date = ldt1.toLocalDate();

2.LocalDate相关操作(获得月份天数、获取月初月末、获取周一),沿用上方代码的date对象完成操作,代码如下:

        // 获取月份天数int lengthOfMonth = date.lengthOfMonth();// 输出结果:31,即2022年8月共31天System.out.println(lengthOfMonth);// 获取月初LocalDate month = date.with(TemporalAdjusters.firstDayOfMonth());// 获取月末LocalDate month = date.with(TemporalAdjusters.lastDayOfMonth());// 获取周一LocalDate week = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));

3.获取周几,代码如下:

    /*** 获取周几** @param datetime 日期,格式为:20220801* @return 周几* @throws java.text.ParseException 异常*/private static String dateToWeek(String datetime) throws java.text.ParseException {SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };Calendar cal = Calendar.getInstance(); // 获得一个日历Date date = null;date = (Date) f.parse(datetime);cal.setTime(date);int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0)w = 0;return weekDays[w];}

main方法运行:

 public static void main(String[] args) throws ParseException {// 获取周几:结果:星期四System.out.println(dateToWeek("20220915"));}

4.判断工作日、休息日、节假日方法(代码作者参考文档:API介绍 · 免费节假日API · 看云),注意,代码作者说明查一次要间隔500毫秒(个人建议最好间隔1秒)以防被拉近黑名单,可以批量查询,以下主要讲批量获取某月的工作日、休息日、节假日代码实现。

工具类:

/*** 调用API接口判断日期是否是工作日 周末还是节假日,工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2** @author djh* @since 2022-08-26*/
public class HolidayUtil {/*** 请求接口** @param httpArg :参数:yyyyMMdd,如20220826,可支持多个,如:20220801,20220802,……* @return 返回结果:工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2*/public static String request(String httpArg) {String httpUrl = "http://tool.bitefu.net/jiari/";BufferedReader reader = null;String result = null;StringBuilder stringBuffer = new StringBuilder();httpUrl = httpUrl + "?d=" + httpArg;try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));String strRead = null;while ((strRead = reader.readLine()) != null) {stringBuffer.append(strRead);}reader.close();result = stringBuffer.toString();} catch (Exception e) {e.printStackTrace();}return result;}
}

业务代码:

    /*** 获取指定年月的工作日、休息日、节假日信息** @param time 时间*/public void save(LocalDate time) {// 获取月的天数int totalDays = time.lengthOfMonth();// 获取年月字符串String yearAndMonth = time.getYear() + "" + time.getMonthValue();if (time.getMonthValue() < 10) {// 补0,如8补为08yearAndMonth = time.getYear() + "0" + time.getMonthValue();}StringBuilder date = new StringBuilder();// 拼接参数for (int i = 1; i <= totalDays; i++) {date.append(yearAndMonth);if (i < 10) {date.append("0").append(i).append(",");} else {date.append(i).append(",");}}// 查询结果是一个json对象,如:{"20220901: "0","20220902: "0",……}// 需要将查询结果封装为List<Map>进行json解析, 解析出的List<Map>集合里只有一个map元素,这个map的key为日期如20220901,value为工作日、休息日、节假日的判定String request = HolidayUtil.request(date.toString());request = "[" + request + "]";List<Map> list = JSON.parseArray(request, Map.class);for (Map map : list) {// set集合中就是该月日期集合,如20220901,之后根据业务需要进行操作即可Set set = map.keySet();for (Object o : set) {String dateStr = (String) o;}}}

Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)相关推荐

  1. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

  2. java 8时间操作_Java8 时间日期类操作

    Java8 时间日期类操作 Java8的时间类有两个重要的特性 线程安全 不可变类,返回的都是新的对象 显然,该特性解决了原来java.util.Date类与SimpleDateFormat线程不安全 ...

  3. java知识点八:时间日期类

    时间日期类 一.常用日期类 1.System类 2.Date类 3.SimpleDateFormat类 4.Calendar类 二.System类 比较常用的相关方法currentTimeMills( ...

  4. Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)

    Java时间工具类(把日期时间转换成xx秒前.xx分钟前.xx小时前...) package com.liuzy.javaopen.entity; import java.text.ParseExce ...

  5. Java知识【时间日期类】

    目录 1:Date 1.1:Date类(应用) 1.2:Date类常用方法(应用) 1.3:SimpleDateFormat类(应用) 1.4:时间日期类练习(应用) 1:Date 1.1:Date类 ...

  6. date日期相减 java_03时间日期类

    Java8 在 java.time 包中增加了时间日期相关的API,弥补了 Java8 以前对日期.时间处理的不足. 在介绍Java8新的时间日期API前,先看看 java8 以前我们操作日期时间常用 ...

  7. oracle 日期格式化 修改_java学习笔记:时间日期类

    一.Date类 Date类表示时间日期类,属于java.util包,使用需要导包.需要了解的是,计算机中时间原点为:1970年1月1日 00:00:00,了解一下这个时间就好.时间换算单位为:1秒 = ...

  8. JAVA时间存储类Period和Duration

    JAVA时间存储类Period和Duration 前言 在JDK1.8中区分了时间和日期的概念,所以有了两个对应的类,LocalDate和LocalTime,区别如下 LocalDate表示日期,不会 ...

  9. java时间日期格式化和JDBC中的处理

    java时间日期格式化和JDBC中的处理 时间格式化类 SimpleDateFormat类 字符串格式化为时间对象 .parse()方法 时间对象格式化为字符串 .format()方法 DateTim ...

最新文章

  1. Android之组件化开发
  2. Asp.Net站点整合Discuz论坛实现同步注册和单点登录
  3. 金融贷款逾期的模型构建7——模型融合
  4. DP专辑之最长公共子序列及其变形
  5. WebBrowser 控件中屏蔽alert,confirm脚本对话框的方法。
  6. Codeigniter 3 拓展HMVC
  7. 【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】
  8. jni c 回调 java,JNI - 如何从C ++或C回调到Java?
  9. PIC中档单片机汇编指令详解(4)
  10. 1.PHP与Web页面的交互
  11. .NET连接MySQL数据库的方法实现
  12. Java MSN LumaQQ
  13. 微软背叛wintel联盟,Intel似乎正陷入四面楚歌之中
  14. 移动硬盘驱动器读到,但不显示盘符
  15. php页面跳底部,监控页面滑到底部加载事件的jq
  16. 字根校对-中文校对软件
  17. 09.mtk背光流程
  18. 天牛须算法(BAS)python实现
  19. 28岁自学3年前端成功转行的励志故事
  20. 中国手机企业库存高达6000万,市场正常后或大规模降价促销

热门文章

  1. 基于PHP的学生成绩管理系统
  2. DVD-Video 解谜 - VOB文件
  3. 5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点
  4. 云摆摊 | 手把手教你制作ESP8266物联网创意点阵时钟,女朋友看了都想要!
  5. 02 【uni-app起步】
  6. GridControl GridView 单元格内容换行
  7. 小米3g路由器编译libwebsockets
  8. php开启端口复用,WebServer端口复用后门
  9. 怎样取消开机硬盘自检?
  10. 用Excel生成频率分布表及频率分布直方图