乐趣区

乐字节-Java8新特性之Date API

上一篇文章,小乐给大家带来了 Java8 新特性之 Optional,接下来本文将会给大家介绍 Java8 新特性之 Date API
前言:
Java 8 通过发布新的 Date-Time API 来进一步加强对日期与时间的处理。旧版的 Java 中, 日期时间 API 存在诸多问题 :

非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,
设计很差 − Java 的日期 / 时间类的定义并不一致,在 java.util 和 java.sql 的包中都有日期类,此外用于格式化和解析的类在 java.text 包中定义。
时区处理麻烦 − 日期类并不提供国际化,没有时区支持

Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:

Local(本地) : 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过制定的时区处理日期时间。

新的 java.time 包涵盖了所有处理日期,时间,日期 / 时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
1、LocalDateTime

LocalDateTime ldt = LocalDateTime.now();
// 获取系统当前时间
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000);
// 构建 LocalDateTime 对象 ldt
System.out.println(ldt2);
// 获取明年此时的时间
LocalDateTime ldt3 = ldt.plusYears(1);
System.out.println(ldt3);
// 获取去年此刻时间
LocalDateTime ldt4 = ldt.minusYears(1);
System.out.println(ldt4);
// 获取年
System.out.println(ldt.getYear());
// 获取月份
System.out.println(ldt.getMonthValue());
// 获取本月第某天
System.out.println(ldt.getDayOfMonth());
// 获取时
System.out.println(ldt.getHour());
// 获取分
System.out.println(ldt.getMinute());
// 获取秒
System.out.println(ldt.getSecond());
// 获取纳秒
System.out.println(ldt.getNano());

2、时间戳
时间戳:以 Unix 元年:1970 年 1 月 1 日 00:00:00 至目前时间之间的毫秒值

public static void testInstant(){
// 时间戳 Instant
Instant ins1 = Instant.now();
// 默认获取 UTC 时间,协调世界时
System.out.println(ins1);
OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);
System.out.println(ins1.toEpochMilli());
Instant ins2 = Instant.ofEpochSecond(60);
System.out.println(ins2);
}

3、日期时间间隔计算:Duration、Period
public static void testDuration(String[] args) {
Instant ins1 = Instant.now();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Instant ins2 = Instant.now();
Duration dura = Duration.between(ins1, ins2);
System.out.println(dura.toMillis());
System.out.println(“———————-“);
LocalTime lt1 = LocalTime.now();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LocalTime lt2 = LocalTime.now();
Duration dura2 = Duration.between(lt1, lt2);
System.out.println(dura2.toMillis());
}

public static void testPeriod(){
LocalDate ld1 = LocalDate.of(2015, 2, 2);
LocalDate ld2 = LocalDate.now();
Period period = Period.between(ld1, ld2);
System.out.println(period);
System.out.println(“ 相差 ” + period.getYears() + “ 年 ”
+ period.getMonths() + “ 月 ”
+ period.getDays() + “ 天 ”);

}

4、时间校正:TemporalAdjuster
public static void testTemporalAdjuster(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
LocalDateTime ldt2 = ldt.withDayOfMonth(10);
System.out.println(ldt2);
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
System.out.println(ldt3);
}

5、日期时间格式化
public static void testDateFormate(){
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDateTime ldt = LocalDateTime.now();
String strDate = ldt.format(dtf);
System.out.println(strDate);
System.out.println(“—————————-“);
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(“yyyy 年 MM 月 dd 日 HH:mm:ss”);
String strDate2 = dtf2.format(ldt);
System.out.println(strDate2);
System.out.println(“—————————–“);
LocalDateTime newDate = ldt.parse(strDate2, dtf2);
System.out.println(newDate);
}

6、TimeZone 时区处理
// 时区的处理
public static void testTimeZone(){
LocalDateTime ldt = LocalDateTime.now(ZoneId.of(“Europe/Dublin”));
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of(“Europe/Dublin”));
ZonedDateTime zdt = ldt2.atZone(ZoneId.of(“Europe/Dublin”));
System.out.println(zdt);
}

这次就分享到这里了,后面小乐会继续给大家介绍 Java8 新特性的,请大家继续多多关注哦!乐字节只讲 Java 技术干货。

退出移动版