网站首页 > 技术文章 正文
1.创建当前时间
// 输出: 2021-07-10T17:41:29.802Z (下同)
Instant instantNow = Instant.now();
//2021-07-11
LocalDate localDateNow = LocalDate.now();
// 01:41:29.826
LocalTime localTimeNow = LocalTime.now();
//2021-07-11T01:41:29.826
LocalDateTime localDateTimeNow = LocalDateTime.now();
//2021-07-11T01:41:29.827+08:00[Asia/Shanghai]
ZonedDateTime zonedDateTimeNow = ZonedDateTime.now();
//2021
Year year = Year.now();
//2021-07
YearMonth yearMonth = YearMonth.now();
//--07-11
MonthDay monthDay = MonthDay.now();
2.创建指定时间
// 创建:2018 年 8 月 8 日
//输出:2018-08-08 (下同)
LocalDate.of(2018,8,8);
//晚上 8 点 0 分 0 秒
//20:00
LocalTime.of(20,0);
//2018 年 8 月 8 日下午 8 点 0 分
LocalDateTime.of(2018,8,8,20,0);//2018-08-08T20:00
3.增减日期、时间
//2016 年 2 月 13 日
LocalDate ld = LocalDate.of(2016,2,13);
// 计算 4 天后的时间
ld.plusDays(4);
//计算当前时间的 3 周后的时间
LocalDate.now().plusWeeks(3);
//计算当前时间 5 个月后的时间
LocalDate.now().plusMonths(5);
//计算当前时间 2 年后的时间
LocalDate.now().plusYears(2);
//8 点 14 分 39 秒 218 纳秒
LocalTime time = LocalTime.of(8,14,39,218);
//计算当前时间 500 纳秒后的时间
LocalTime.now().plusNanos(500);
//计算当前时间45秒后的时间
LocalTime.now().plusSeconds(45);
//计算当前时间19分钟后的时间
LocalTime.now().plusMinutes(19);
//计算当前时间3小时后的时间
LocalTime.now().plusHours(3);
注:减少使用 minusXXX ,用法相同
4.其他增减日期时间方法
//今天程序员小张查看自己的车辆保险记录的时候看到还有比 2 年 3 月 8 天就到期了,计算到期时间是什么时候。
LocalDateTime.now().plusYears(2).plusMonths(3).plusDays(8);
//或
Period period = Period.of(2,3,8);//来表示一段时间,三个参数代表年月日
LocalDateTime.now().plus(period);
//结婚10年称为锡婚,2020年2月2日11点11分11秒称为对称日,很多情侣准备在那天结婚,如果在那天结婚了,那么锡婚会发生在什么时候?
LocalDateTime.of(2020,2,2,11,11,11).plus(1,ChronoUnit.DECADES)
//加一个半天
LocalDateTime.now().plus(1,ChronoUnit.HALF_DAYS);
5.修改日期、时间
案例1:
//修改为1号
LocalDateTime.now().withDayOfMonth(1);
//修改为1号
LocalDateTime.now().with(ChronoField.DAY_OF_MONTH,1);
案例2:
LocalDate now = LocalDate.now();
//修改时间为当月第一天
now.with(TemporalAdjusters.firstDayOfMonth());
//修改时间为下个月的第一天.
LocalDate firstDayoOfNextMonth = now.with(TemporalAdjusters.firstDayOfNextMonth());
//修改时间为下一年的第一天.
LocalDate firstDayofNextYear = now.with(TemporalAdjusters.firstDayOfNextYear());
//修改时间为本年的第一天.
LocalDate firstDayofYear = now.with(TemporalAdjusters.firstDayOfYear());
//修改时间为本月的最后一天.
LocalDate lastDayofMonth = now.with(TemporalAdjusters.lastDayOfMonth());
//修改时间为本年的最后一天.
LocalDate lastDayofYear = now.with(TemporalAdjusters.lastDayOfYear());
案例3:
//将当前时间改为下一个周日
LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
//将当前时间该上一个周三
LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY));
案例4:
//假如员工一个月中领取工资,发薪日是每月15号,如果发薪日时周末,则调整为周五。
LocalDate date = LocalDate.of(2021,5,15).with(d->{
LocalDate readyDay = LocalDate.from(d);
readyDay = readyDay.withDayOfMonth(15);
if(readyDay.getDayOfWeek()== DayOfWeek.SUNDAY||readyDay.getDayOfWeek()==DayOfWeek.SATURDAY){
readyDay = readyDay.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
}
return readyDay;
});
案例5:
//计算当前时间距离下一个劳动节还有多少天?
Long days = LocalDate.of(2021,4,1).query(d->{
//1.TemporalAccessor是LocalDate和LocalDateTime的顶级父接口,相当于LocalDate就是这个接口的实现类,将temporal转换为LocalDate进行使用.
LocalDate now = LocalDate.from(d); //now -> 2020 - 1 - 17
//2.封装当年的劳动节时间,年份: now来获取,月份:Month.MAY,日期:1.
LocalDate laborDay = LocalDate.of(now.getYear(), Month.MAY,1);//laborDay -> 2020 - 5
//2.1.判断当前时间是否已经超过了当年的劳动节,如果超过了当年的劳动节,则laborDay+1年.
if (now.isAfter(laborDay)) {
laborDay = laborDay.plusYears(1);
}
//3.通过Chronounit的between方法来计算两个时间点的差额.
return ChronoUnit.DAYS.between( now,laborDay);
});
6.日期类之间的转换
案例1: java.util.Date 转换为 java.time.LocalDate
Date date= new Date();
Instant i = date.toInstant();
ZonedDateTime z = i.atZone(ZoneId.systemDefault());
LocalDate d = z.toLocalDate();
案例2:java.sql.Date转换为java.time.LocalDate
Date date= new Date(System.currentTimeMillis());
date.toLocalDate();
案例3:java.sql.Timestamp 转换为java.time.LocalDate
Timestamp date= new Timestamp(System.currentTimeMillis());
date.toLocalDateTime();
案例4:使用java.sql.Date类将java.util.Date转换为java.time.LocalDate
Date d= new Date();
java.sql.Date date = new java.sql.Date(d.getTime());
date.toLocalDate();
案例5:将Calendar 转换为java.time.ZonedDateTime
//1.初始化calendar对象.
Calendar cal = Calendar.getInstance();
//2.calendar对象自Java1.1版本开始提供了一个方法用于获取时区对象getTimezone方法,要将calendar转换为zonedDateTime对象需要先获取到时区对象,
TimeZone timezone = cal.getTimeZone();
//3.从Java1.8开始Timezone类提供一个方法可以获取到ZoneId ->拿zoneTd对象来构建
ZoneId zoneId = timezone.toZoneId();
//4.ZonedDateTime类有一个ofInstant方法,可以将一个Instant对象和ZoneId对象封装为一个ZonedDateTime.
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(cal.toInstant(), zoneId);
7.日期时间格式化和解析
案例1:
LocalDateTime now = LocalDateTime.now();
//输出:2021-07-07(下同)
String s1 = now.format(DateTimeFormatter.ISO_DATE);
//2021-07-07T07:09:21.056
String s2= now.format(DateTimeFormatter.ISO_DATE_TIME);
//解析
LocalDateTime time = LocalDateTime.parse(s2);
案例2:
LocalDateTime now = LocalDateTime.now();
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));//2021年7月7日 星期三
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));//2021年7月7日
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));//2021-7-7
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));//21-7-7
案例3:
LocalDateTime d= LocalDateTime.of(1998,3,18,17,19,28);
//输出:1998-03月-18---17:19分28秒
d.format(DateTimeFormatter.ofPattern("yyyy-MM月-dd---HH:mm分ss秒"));
猜你喜欢
- 2024-09-21 Java并发编程:LongAdder | LongAccumulator 对比测试
- 2024-09-21 「Java技巧」优雅的统计程序的执行时间,别再用System.cur
- 2024-09-21 Flink SQL 知其所以然(九)| SQL 的时间语义
- 2024-09-21 ArrayList插入1000w条数据之后,我怀疑了jvm...
- 2024-09-21 《Java实战之内存模型》详解篇(java内存模型happens before)
- 2024-09-21 比反射更快!使用ASM获取class信息(ClassReader)
- 2024-09-21 了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑
- 2024-09-21 让大学生写的一个计算时间的方法,有人看得出来是在做什么吗?这
- 2024-09-21 Java基础——Java多线程(Lock接口详解)
- 2024-09-21 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 569℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 510℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 467℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 444℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)