栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA8新特性之时间API LoacalDate、LoacalTime、LoacalDateTime

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA8新特性之时间API LoacalDate、LoacalTime、LoacalDateTime

为什么要使用LoacalDate、LoacalTime、LoacalDateTime?

java.util.Date可读性差

Tue Sep 10 09:34:04 CST 2019

如果对时间进行格式化,必然会用到SimpleDateFormat,但SimpleDateFormat是线程不安全的。

为什么simpleDateFormat是线程不安全的?

原因:在多线程环境下,当多个线程同时使用相同的SimpleDateFormat对象(如static修饰)的话,如调用format方法时,多个线程会同时调用calender.setTime方法,导致time被别的线程修改,因此线程是不安全的。

LocalDate、LocalTime、LoacalDateTime实例化

LocalDate:只含年月日的日期对象

//获取当前日期
LocalDate now = LocalDate.now();
System.out.println(now);//2022-06-29
//获取指定日期
LocalDate localDate = LocalDate.of(2022,6,9);
System.out.println(localDate);//2022-06-09

LocalTime:只含时分秒的时间对象

//获取当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);//09:49:05.061
//获取指定时间
LocalTime localTimeOf = LocalTime.of(12,24,12,444);
System.out.println(localTimeOf);//12:24:12.000000444

LocalDateTime:同时含有年月日时分秒的日期对象

//获取当前日期+当前时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2022-06-29T14:34:22.937
//获取指定日期+指定十时间
LocalDateTime localDateTimeOf = LocalDateTime.of(2020, 7, 30, 12, 12);
System.out.println(localDateTimeOf);//2020-07-30T12:12
// 日期+时间 组成 包含年月日,时分秒都有的日期
LocalDateTime of = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println(of);//2022-06-29T14:34:22.937
LoacalDateTime日期的加减法
//当前时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2022-06-30T09:21:32.336
//加1年 加1个月 加1天 加1小时 加1分钟 加1毫秒
LocalDateTime pluslocalDateTime= localDateTime.plusYears(1L).plusMonths(1L).plusDays(1L).plusHours(1L).plusMinutes(1).plusSeconds(1L);
System.out.println(pluslocalDateTime);2023-07-31T10:22:33.336
//减1年 减1个月 减1天 减1小时 减1分钟 减1毫秒
LocalDateTime  minuslocalDateTime = localDateTime.minusYears(1L).minusMonths(1L).minusDays(1L).minusHours(1L).minusMinutes(1).minusSeconds(1L);
System.out.println(minuslocalDateTime);2021-05-29T08:20:31.336
//另外一种方式
//ChronoUnit中年月日时分秒都有
LocalDateTime lastYer = localDateTime.minus(1, ChronoUnit.YEARS);
System.out.println(lastYer);//2021-06-30T09:27:44.132
LocalDateTime nextYer = localDateTime.plus(1, ChronoUnit.YEARS);
System.out.println(nextYer);//2023-06-30T09:27:44.132
LoacalDateTime时间差

LoacalDate、LocalTime与LoacalDateTime用法一样

LocalDateTime now = LocalDateTime.now();
LocalDateTime dateTime = LocalDateTime.of(2008, 8, 8, 8, 8);
System.out.println(now.isAfter(dateTime));//当前时间是否在dateTime之后
System.out.println(now.isBefore(dateTime));//当前时间是否在dateTime之前
//时间差
Duration duration = Duration.between(dateTime,now);
System.out.println(duration.toDays()); //转换为天
System.out.println(duration.toHours()); //转换为小时
LoacalDateTime日期转换
//日期转字符串
LocalDateTime now = LocalDateTime.now();
System.out.println(now); //2022-06-30T17:00:47.442
String format1 = now.format(DateTimeFormatter.ISO_DATE);
System.out.println(format1);//2022-06-30
String format2 = now.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(format2); //20220630
String format3 = now.format(DateTimeFormatter.ISO_DATE_TIME);
System.out.println(format3); //2022-06-30T17:00:47.442
String format4 = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println(format4); //2022-06-30T17:00:47.442
String format5 = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(format5); //2022-06-30 17:00:47
//字符串转日期
LocalDate date = LocalDate.parse("2022-06-30");
System.out.println(date.getClass());//java.time.LocalDate
System.out.println(date);//2022-06-30
String str = "2022-06-30 09:46:33";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(str,dateTimeFormatter);
System.out.println(ldt);//2020-07-07T22:24:33
LoacalDateTime获取某个日期
LocalDate date = LocalDate.parse("2022-07-01");
//本月第几个周几  2为第几周  DayOfWeek.MONDAY为星期几
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.MONDAY)));//2022-07-04
//上个月最后一个周几
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(0, DayOfWeek.MONDAY)));//2022-06-27
//本月最后一周的周几
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-1, DayOfWeek.MONDAY)));//2022-07-25
//第一个周几
System.out.println(date.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));//2022-07-04
//明年第一天
System.out.println(date.with(TemporalAdjusters.firstDayOfNextYear()));//2023-01-01
//下个周一
System.out.println(date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)));//2022-07-04
//本月最后一天
System.out.println(date.with(TemporalAdjusters.lastDayOfMonth()));//2022-07-31
//本月第一天
System.out.println(date.with(TemporalAdjusters.firstDayOfMonth()));//2022-07-01
//当天开始时间
LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);//2022-07-01T00:00
System.out.println(todayStart);
//当天中午12点
LocalDateTime todayMid = LocalDateTime.of(LocalDate.now(), LocalTime.NOON);//2022-07-01T12:00
System.out.println(todayMid);
//当前结束时间
LocalDateTime todayEnd = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);//2022-07-01T23:59:59.999999999
System.out.println(todayEnd);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号