Java LocalDate 常用日期操作

日常开发中, 我们会经常遇到日期的运算, 操作, 格式化等, 本文主要讲述LocalDate的常用日期操作.

简介

LocalDate是JDK8以后的Api, 主要功能年-月-日 周的相关计算, 比如计算两个日期间隔的天数, 当前日期是这一年的第几天, 当前月有多少天, 以及加多少天是什么日期, 减多少天是什么日期.......

常用 Api

1 获取日期对象信息

scss 复制代码
// 本地当前日期, 日期对象(不可变对象)
LocalDate ld = LocalDate.now();
System.out.println(ld); // 2023-11-13

// 获取日期对象中的信息
// 是否是闰年
boolean isLeap = ld.isLeapYear();
int year = ld.getYear();          // 年份
int month1 = ld.getMonth().getValue(); // 月份
int month2 = ld.getMonthValue();  // 月份
int dayOfMonth = ld.getDayOfMonth();  // 日 / 本月的第几天
int dayOfYear = ld.getDayOfYear();    // 本年中的第几天
int dayOfWeek = ld.getDayOfWeek().getValue(); // 星期几, 1 - 7 分别对应 周一 - 周日
int lenOfYear = ld.lengthOfYear();   // 本年有多少天
int lenOfMonth = ld.lengthOfMonth(); // 本份有多少天
        
System.out.println(isLeap);     // false
System.out.println(year);       // 2023
System.out.println(month1);     // 11
System.out.println(month2);     // 11
System.out.println(dayOfMonth); // 13
System.out.println(dayOfYear);  // 317
System.out.println(dayOfWeek);  // 1 (周一) 
System.out.println(lenOfYear);  // 365
System.out.println(lenOfMonth); // 30

2 直接修改日期对象信息

scss 复制代码
// 直接修改某个信息: withYear、withMonth、withDayOfMonth、withDayOfYear
LocalDate re1 = ld.withYear(2099);   // 修改 年份
LocalDate re2 = ld.withMonth(12);    // 修改 月份
LocalDate re3 = ld.withDayOfMonth(20); // 修改 日
LocalDate re4 = ld.withDayOfYear(318); // 修改一年中的第几天, 317 + 1 天
System.out.println(re1); // 2099-11-13
System.out.println(re2); // 2023-12-13
System.out.println(re3); // 2023-11-20 
System.out.println(re4); // 2023-11-14
System.out.println(ld);  // 2023-11-13

3 日期运算: 加 / 减

  • 1 加法
ini 复制代码
// 把某个日期加多少: plusYears、plusMonths、plusDays、plusWeeks
LocalDate re5 = ld.plusYears(2);
LocalDate re6 = ld.plusMonths(2);
LocalDate re7 = ld.plusDays(2);
LocalDate re8 = ld.plusWeeks(1);
System.out.println(re5); // 2025-11-13
System.out.println(re6); // 2024-01-13
System.out.println(re7); // 2023-11-15
System.out.println(re8); // 2023-11-20
System.out.println(ld);  // 2023-11-13
  • 2 减法
ini 复制代码
// 把某个日期减多少:minusYears、minusMonths、minusDays、minusWeeks
LocalDate ld1 = ld.minusYears(2);
LocalDate ld2 = ld.minusMonths(2);
LocalDate ld3 = ld.minusDays(2);
LocalDate ld4 = ld.minusWeeks(1);
System.out.println(ld1); // 2021-11-13
System.out.println(ld2); // 2023-09-13
System.out.println(ld3); // 2023-11-11
System.out.println(ld4); // 2023-11-06
System.out.println(ld);  // 2023-11-13

4 获取指定日期的 LocalDate 对象

ini 复制代码
LocalDate ld5 = LocalDate.of(2099, 12, 12);
LocalDate ld6 = LocalDate.of(2099, 12, 12);

5 判断 2 个日期的早晚

csharp 复制代码
System.out.println(ld5.equals(ld6));  // true  同一天
System.out.println(ld5.isAfter(ld));  // true  ld5 在 ld 之后
System.out.println(ld5.isBefore(ld)); // false ld5 不在 ld 之前

6 格式化

ini 复制代码
// 1 日期 格式化为 String
String formatStr = "yyyy年MM月dd日";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(formatStr);
String result = ld.format(dtf);
System.out.println(result);  // 2023年11月13日

// 2 String 格式化为 日期
String formatStr2 = "yyyy/MM/dd";
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(formatStr2);
String dateStr = "2099/11/13";
LocalDate date = LocalDate.parse(dateStr, dtf2);
System.out.println(date);    // 2099-11-13

// 如果是 - 连接的 String, 不需要指定格式化样式
String dateStr2 = "2088-11-13";
LocalDate date2 = LocalDate.parse(dateStr2);
System.out.println(date2);  // 2088-11-13
相关推荐
IT_陈寒6 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信6 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
CCblandy6 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
蜗牛互联网6 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff7 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing7 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
dd聊技术7 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端
ly76897 小时前
Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
java·mongodb·spring·批量写入·bulkoperations·写关注·mongotemplate
9命怪猫7 小时前
关于eBPF的JIT运维需要了解的
后端
TAKETODAY7 小时前
Netty 是怎么把 HTTP 请求交给 MVC 的?一个请求的完整链路
java·netty