JDK1.8新的日期类,Lambda表达式
JDK1.8新特性时间日期类新增一套新的时间日期APIDate,Calender的时间日期可能出现线程不安全,因此就出现了新的日期类LocalDate:表示年月日的类LocalTime:时分秒的类LocalDateTmie:年月日,时分秒的类Instant类:获取从1970.1.1.零时到现在的美国时区的毫秒值得到的时间是美国时区,我们可以设置偏移量。时区编号类:ZoneId类,可以获取时区注意细
JDK1.8新特性
时间日期类
-
新增一套新的时间日期API
- Date,Calender的时间日期可能出现线程不安全,因此就出现了新的日期类
- LocalDate:表示年月日的类
- LocalTime:时分秒的类
- LocalDateTmie:年月日,时分秒的类
-
Instant类:获取从1970.1.1.零时到现在的美国时区的毫秒值
- 得到的时间是美国时区,我们可以设置偏移量。
- 时区编号类:ZoneId类,可以获取时区
-
注意细节:如果用LocalDateTime 想按照我们的自定义的格式去解析,注意日期字符串的 年月日时分秒要写全,不然就报错
-
.添加年月日时分秒的方法 plus系列的方法 都会返回一个新的LocalDateTime的对象
LocalDateTime localDateTime = ldt.plusYears(1);
LocalDateTime localDateTime1 = ldt.plusMonths(3);
LocalDateTime localDateTime2=ldt.plusHours(10); -
减去年月日时分秒的方法 minus 系列的方法 注意都会返回一个新的LocalDateTime的对象
例如:LocalDateTime localDateTime2 = ldt.minusYears(8); -
指定年月日时分秒的方法 with系列的方法 注意都会返回一个新的LocalDateTime的对象
例如 LocalDateTime localDateTime3 = ldt.withYear(1998);
//获取这个月的第几个星期几是几号,比如 TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY) 代表的意思是这个月的第二个星期五是几号
// TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)
LocalDateTime with1 = now.with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.FRIDAY));
/*Author:LH
CreatTime:2020.06.24.16:43*/
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class MyLocalDate {
public static void main(String[] args) {
// 获取当前的时间(输出格式:2020-06-24T16:43:55.660043)
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 获取日期
System.out.println(now.getDayOfMonth());
// 获取星期日期
System.out.println(now.getDayOfWeek());
// 获取一年中的第几天
System.out.println(now.getDayOfYear());
System.out.println("++++++++++");
System.out.println(now.getMinute());
System.out.println(now.getYear());
System.out.println(now.getMonth());
// 将日期格式化成指定的字符串
String format = now.format(DateTimeFormatter.ofPattern("yyyy,MM,dd HH,mm,ss"));
System.out.println(format);
System.out.println("=========");
// LocalDateTime转化成LocalDate,LocalTime
System.out.println(now.toLocalDate());
System.out.println(now.toLocalTime());
System.out.println("======");
// 指定日期获取日期对象
LocalDateTime time = LocalDateTime.of(2019, 9, 13, 13, 25, 59);
System.out.println(time);
// 将指定字符日期解析成日期对象,注意要用英文标点,日期和时间之间用T隔开
LocalDateTime parse = LocalDateTime.parse("1996-08-12T13:14:39");
System.out.println(parse);
// 判断是否在一个日期之前
boolean b = parse.isBefore(now);
System.out.println(b);
// 判断一个日期是否在一个日期之后
boolean after = parse.isAfter(now);
System.out.println(after);
}
}
/*Author:LH
CreatTime:2020.06.24.17:40*/
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Set;
public class Istance {
public static void main(String[] args) {
// 时间戳类,获取当前美国的时间
Instant now = Instant.now();
System.out.println(now);
// 获取从元年到现在的秒值
System.out.println(now.getEpochSecond());
// 获取从元年到现在的毫秒值
System.out.println(now.toEpochMilli());
System.out.println("==========");
// 给获取到的日期增加偏移量,获取中国时间
OffsetDateTime time = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(time);
// 获取默认系统时间的时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);
// 获取所有的时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
zoneIds.forEach(s -> System.out.println(s));
// 给计算机元年增加秒数/增加毫秒值 ofEpochMilli() 给计算机元年增加毫秒数
Instant instant = Instant.ofEpochSecond(60 * 60 * 8);
System.out.println(instant);
}
}
Duration类
- 用于计算两个时间间隔的类
Period类
- 计算两个日期间隔的类
/*Author:LH
CreatTime:2020.06.24.18:07*/
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
public class Duration {
public static void main(String[] args) {
// 求另个日期之间的间隔
LocalDate now = LocalDate.now();
System.out.println(now);
LocalDate parse = LocalDate.parse("1996-09-25");
System.out.println(parse);
Period between = Period.between(now, parse);
System.out.println(between);
// 求两个时间的间隔
LocalTime time = LocalTime.now();
LocalTime time1 = LocalTime.parse("08:00:00");
java.time.Duration between1 = java.time.Duration.between(time, time1);
System.out.println(between1);
}
}
TemporalAdjuster 接口
-
时间矫正器接口,我们常用这个指定一些日期。
-
/*Author:LH CreatTime:2020.06.24.22:03*/ import java.time.DayOfWeek; import java.time.LocalDateTime; import java.time.temporal.Temporal; import java.time.temporal.TemporalAdjusters; public class TemporalAdjuster { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 获取本月最后一天 LocalDateTime with = now.with(TemporalAdjusters.lastDayOfMonth()); // 获取下一个星期五是几号 LocalDateTime with1 = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)); System.out.println(with); System.out.println(with1); // 下个工作日是几号 LocalDateTime time = LocalDateTime.now(); System.out.println(time.with(new java.time.temporal.TemporalAdjuster() { @Override public Temporal adjustInto(Temporal temporal) { LocalDateTime dateTime = (LocalDateTime) temporal; DayOfWeek dayOfWeek = dateTime.getDayOfWeek(); if (dayOfWeek.equals(DayOfWeek.FRIDAY)) { return dateTime.plusDays(3); } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) { return dateTime.plusDays(2); } else { return dateTime.plusDays(1); } } })); } }
DateTimeFormatter
-
获取对象的方式,通过静态方法ofPattern(“yyyy-MM-dd”);
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
LocalDateTime now = LocalDateTime.now(); -
format()方法把一个日期对象的默认格式 格式化成指定的格式
String format1 = dateFormat.format(now);
System.out.println(format1); -
格式化日期 方式2使用日期类中的format方法 传入一个日期格式化类对象
-
使用自定义的日期格式格式化字符串
DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);//自定义一个日期格式
String time = now1.format(timeFormat);
System.out.println(time); -
把一个日期字符串转成日期对象
使用日期类中的parse方法传入一个日期字符串,传入对应的日期格式化类
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
LocalDateTime parse = LocalDateTime.parse(time, timeFormat);
System.out.println(parse);
Lambda表达式
- 可以对匿名内部类简写,简化代码。
- 表达式语法:
- 箭头符号:->,这个符号将表达式分为左右两部分。
- 左边:是你实现的这个接口中的抽象方法的形参列表。
- 右边:你对这个抽象方法实现的具体逻辑
- 右边的逻辑只有一句,大括号可以省略。
- 左边一个参数,小括号就可以省略。
- 左边的数据类型也可以省略。
作为参数传递
- 快捷方法:可以先写成正常的匿名内部类,alt+enter转换成lambda表达式。
Lambda表达式注意事项
- 需要函数式接口的支持
- 什么是函数式接口:接口里面只有一个抽象方法,@FunctionalInterface 可以检测是否是函数式接口。
代码:
获取所有的时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
zoneIds.forEach(s -> System.out.println(s));
更多推荐
所有评论(0)