jdk1.8中关于LocalDate的小练习
关于LocalDate的小练习
1.题目
完成以下日期时间处理的需求
- 找出下个月的倒数第3天是哪天
- 创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段
2.代码
package com.ccjiuhong.assessment;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Random;
/**
* 1. 找出下个月的倒数第3天是哪天
* 2. 创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段
*/
public class DateTimeHandler {
public static void main(String[] args) {
// 1.找出下个月的倒数第3天是哪天
LocalDate today = LocalDate.now();
LocalDate firstDayOfThisMonth = today.withDayOfMonth(1);
LocalDate firstDayOfTheThirdMonth = firstDayOfThisMonth.plusMonths(2);
LocalDate result = firstDayOfTheThirdMonth.minusDays(3);
System.out.println("下个月的倒数第3天是:" + result);
// LocalDate:本地日期 不包含具体时间 例如 2020-09-27。LocalDate.now(): 今日日期,2020-09-27。
// today.withDayOfMonth(1):这个月的第一天,返回格式也是:2020-09-01
// java.time.LocalDateTime.plusMonths(long monthsToAdd)方法:返回此日期时间的副本,并添加了指定的月份。
// java.time.LocalDateTime.minusDays(longdaysToSubtract)方法返回此LocalDateTime的副本,并减去指定的天数。
// 2.创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期时间,要求随机的结果能覆盖整个时间段
LocalDateTime start = LocalDateTime.of(2020, 1, 1, 0, 0, 0);
LocalDateTime end = LocalDateTime.of(2020, 12, 31, 23, 59, 59);
long startSecond = start.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
long endSecond = end.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
long randomSecond = startSecond + new Random().nextInt((int) (endSecond - startSecond + 1));
Instant randomInstant = Instant.ofEpochSecond(randomSecond);
LocalDateTime random = LocalDateTime.ofInstant(randomInstant, ZoneId.systemDefault());
System.out.println("随机日期时间 = " + random);
// LocalDateTime:结合了日期和时间 但不包含时差和时区 start = 2020-01-01T00:00
// end = 2020-12-31T23:59:59
// 获取从1970-01-01T00到2020.1.1的毫秒数 startSecond = 1577808000
// ZoneId.systemDefault() 是 :Asia/Shanghai
// 获取从1970-01-01T00到2020.12.31的毫秒数 endSecond = 1609430399
// 在这两个毫秒数之间的随机毫秒数
// 随机毫秒数转换成时间格式
// 方法:public static Instant ofEpochSecond (long epochSecond)
// 这个方法只接受一个参数epochSecond,它是从1970-01-01T00:00:00Z开始的秒数。
// 返回为Instant类型的数据,例如:1970-01-14T21:20:00Z
// Java中LocalDateTime类的ofInstant(Instant Instant,ZoneId zone)方法:
// 用于使用Instant和区域ID创建LocalDateTime的实例。将这两个参数传递给方法,并且在这两个参数的基础上方法返回LocalDateTime。
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效