JAVASE基础模块四十五(JDK1.8新功能 Lambda表达式 格式化日期 减去时间 加上时间 判断时间)
Date
SimpleDateFormat Calendar
方法
获取日期
LocalDate.now()年月日 LocalTime.now()时分秒 LocalDateTime.now()年月日时分秒 指定日期
LocalDateTime.of(2018, 6, 25, 15, 54)
获取具体分类时间
now2.getDayOfYear() now2.getDayOfMonth() now2.getMonthValue() 运用了枚举 now2.getDayOfWeek() now2.getHour()
package New.X1;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class DateAPI {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now);
LocalTime now1 = LocalTime.now();
System.out.println(now1);
LocalDateTime now2 = LocalDateTime.now();
System.out.println(now2);
int y = now2.getDayOfYear();
int m = now2.getDayOfMonth();
int m1 = now2.getMonthValue();
DayOfWeek w = now2.getDayOfWeek();
int h = now2.getHour();
System.out.println(y);
System.out.println(m);
System.out.println(m1);
System.out.println(w);
System.out.println(h);
LocalDateTime of = LocalDateTime.of(2018, 6, 25, 15, 54);
System.out.println(of);
}
}
运行结果:
2020-08-29
17:20:38.338841800
2020-08-29T17:20:38.338841800
242
29
8
SATURDAY
17
2018-06-25T15:54
格式化日期
DateTimeFormatter g = DateTimeFormatter.ofPattern(“yyyy年MM月dd日 HH时mm分ss秒”) 格式化日期的类 now.format(g) 格式化日期 解析日期 LocalDateTime.parse(s, DateTimeFormatter.ofPattern(“yyyy年MM月dd日 HH时mm分ss秒”))
package New.X1;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class GeShiHua {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
DateTimeFormatter g = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
String s = now.format(g);
System.out.println(s);
System.out.println("==================");
String se="2020年12月31日 23时59分59秒";
LocalDateTime mo = LocalDateTime.parse(s, DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
System.out.println(mo);
}
}
运行结果:
2020-08-29T17:23:34.134812800
2020年08月29日 17时23分34秒
==================
2020-08-29T17:23:34
减去时间
package New.X1;
import java.time.LocalDateTime;
public class Jian {
public static void main(String[] args) {
//minxxx 减去时间
LocalDateTime now = LocalDateTime.now();
LocalDateTime y = now.minusYears(5);
LocalDateTime m = now.minusMonths(10);
System.out.println(y);
System.out.println(m);
}
}
运行结果:
2015-08-29T17:24:00.638455400
2019-10-29T17:24:00.638455400
加上时间
package New.X1;
import java.time.LocalDateTime;
public class ZengJia {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime y = now.plusYears(3);
LocalDateTime m = now.plusMonths(5);
//plusxxx 的方法 返回的是新的对象
System.out.println(y);
System.out.println(m);
}
}
2023-08-29T17:24:57.359865300
2021-01-29T17:24:57.359865300
判断
package New.X1;
import java.time.LocalDate;
public class PanDuan {
public static void main(String[] args) {
LocalDate of = LocalDate.of(2022, 3, 24);
LocalDate now = LocalDate.now();
//判断时间前后
System.out.println(of.isBefore(now));
System.out.println(of.isAfter(now));
//判断是不是闰年
System.out.println(of.isLeapYear());
}
}
运行结果:
false
true
false
一些方法
package New.X1;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class ZhiD {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now);
LocalDate y = now.withYear(3333);
System.out.println(y);
System.out.println("==================================");
/*月份的第一天
下周几的日期*/
TemporalAdjuster one = TemporalAdjusters.firstDayOfMonth();
LocalDate w = now.with(one);
System.out.println(w);
TemporalAdjuster one1 = TemporalAdjusters.next(DayOfWeek.SATURDAY);
LocalDate w1 = now.with(one1);
System.out.println(w1);
TemporalAdjuster one2 = TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY);
LocalDate w2 = now.with(one2);
System.out.println(w2);
}
}
运行结果:
2020-08-29
3333-08-29
==================================
2020-08-01
2020-09-05
2020-09-02
毫秒值
package New.X2;
import java.time.Instant;
import java.util.Date;
public class HaoMiao {
public static void main(String[] args) {
long t = new Date().getTime();
System.out.println(t);
//获取1970-到现在的秒值
Instant i = Instant.now();
long miao = i.getEpochSecond();
System.out.println(miao);
//获取1970-到现在的毫秒值
long l = i.toEpochMilli();
System.out.println(l);
//增加秒值 增加一天
Instant in = Instant.ofEpochSecond(60 * 60 * 24);
System.out.println(in);
}
}
运行结果:
1598693335163
1598693335
1598693335164
1970-01-02T00:00:00Z
间隔
package New.X2;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;
public class JianGe {
public static void main(String[] args) {
Instant now = Instant.now();
int n=0;
for (int i = 0; i < 500; i++) {
n++;
}
Instant end = Instant.now();
Duration b = Duration.between(now,end);
long l = b.toNanos();
System.out.println(l);
LocalDate of = LocalDate.of(1998, 11, 15);
LocalDate now1 = LocalDate.now();
Period bb = Period.between(of, now1);
int y = bb.getYears();
System.out.println(y);
int m = bb.getMonths();
System.out.println(m);
}
}
运行结果:
0
21
9
时间戳
package New.X2;
import java.time.*;
import java.util.Set;
public class ShiJianChuo {
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println(now);
//设置偏移时间量
OffsetDateTime p = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(p);
/*ZoneID 时区类*/
Set<String> a = ZoneId.getAvailableZoneIds();
for (String s : a) {
if (s.contains("Shanghai")) {
System.out.println(s);
}
if (s.contains("Tokyo")) {
System.out.println(s);
}
}
LocalDateTime now1 = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(now1);
//默认时区id
ZoneId z = ZoneId.systemDefault();
System.out.println(z);
}
}
运行结果:
2020-08-29T09:30:26.027691300Z
2020-08-29T17:30:26.027691300+08:00
Asia/Shanghai
Asia/Tokyo
2020-08-29T18:30:26.058608700
Asia/Shanghai
下一个工作日的判断
package New.X2;
import java.time.LocalDate;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
public class WorkDay {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now.getDayOfWeek());
LocalDate with = now.with(new TemporalAdjuster() {
@Override
public Temporal adjustInto(Temporal temporal) {
switch (now.getDayOfWeek()) {
case SUNDAY:
return now.plusDays(1);
case SATURDAY:
return now.plusDays(2);
case FRIDAY:
return now.plusDays(3);
case THURSDAY:
return now.plusDays(4);
case WEDNESDAY:
return now.plusDays(5);
case TUESDAY:
return now.plusDays(6);
case MONDAY:
return now.plusDays(7);
}
return null;
}
});
System.out.println(with);
}
}
运行结果:
SATURDAY
2020-08-31
Lambda表达式
lambda 表达式 是匿名内部类的一种简写形式 Lambda表达式的语法特点
lambda表达式 引入了一个箭头-> 箭头符号->将lambda表达式分成左右两部分 左边:写这个接口的抽象方法的形参列表 右边:你对这个接口的抽象方法的具体的重写逻辑 当接口中只有一个抽象方法 才能使用Lambda表达式来简写 Lambda表达式只支持函数式接口:借口中只有一个抽象方法
package New.X3;
@FunctionalInterface
//可以检测接口是不是函数式接口
public interface Lambda {
int show(String name,int age);
}
class Test{
public static void main(String[] args) {
Lambda l1 = new Lambda() {
@Override
public int show(String name, int age) {
return 100;
}
};
Lambda l = (name, age) -> 100;
}
}
待续…