乐字节-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


LocalDateTimeldt=LocalDateTime.now();

// 获取系统当前时间

System.out.println(ldt);

LocalDateTimeldt2=LocalDateTime.of(2019,01,01,12,12,12,888000000);

// 构建LocalDateTime对象ldt

System.out.println(ldt2);

// 获取明年此时的时间

LocalDateTimeldt3=ldt.plusYears(1);

System.out.println(ldt3);

// 获取去年此刻时间

LocalDateTimeldt4=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 至目前时间之间的毫秒值

publicstaticvoidtestInstant(){

// 时间戳 Instant

Instantins1=Instant.now();

// 默认获取UTC时间,协调世界时

System.out.println(ins1);

OffsetDateTimeodt=ins1.atOffset(ZoneOffset.ofHours(8));

System.out.println(odt);

System.out.println(ins1.toEpochMilli());

Instantins2=Instant.ofEpochSecond(60);

System.out.println(ins2);

}


3、日期时间间隔计算:Duration、Period

publicstaticvoidtestDuration(String[]args) {

Instantins1=Instant.now();

try{

Thread.sleep(2000);

}catch(InterruptedExceptione) {

e.printStackTrace();

       }

Instantins2=Instant.now();

Durationdura=Duration.between(ins1,ins2);

System.out.println(dura.toMillis());

System.out.println("----------------------");

LocalTimelt1=LocalTime.now();

try{

Thread.sleep(2000);

}catch(InterruptedExceptione) {

e.printStackTrace();

       }

LocalTimelt2=LocalTime.now();

Durationdura2=Duration.between(lt1,lt2);

System.out.println(dura2.toMillis());

   }

publicstaticvoidtestPeriod(){

LocalDateld1=LocalDate.of(2015,2,2);

LocalDateld2=LocalDate.now();

Periodperiod=Period.between(ld1,ld2);

System.out.println(period);

System.out.println("相差"+period.getYears()+"年"

+period.getMonths()+"月"

+period.getDays()+"天");

   }


4、时间校正:TemporalAdjuster

publicstaticvoidtestTemporalAdjuster(){

LocalDateTimeldt=LocalDateTime.now();

System.out.println(ldt);

LocalDateTimeldt2=ldt.withDayOfMonth(10);

System.out.println(ldt2);

LocalDateTimeldt3=ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));

System.out.println(ldt3);

}


5、日期时间格式化

publicstaticvoidtestDateFormate(){

DateTimeFormatterdtf=DateTimeFormatter.ISO_DATE;

LocalDateTimeldt=LocalDateTime.now();

StringstrDate=ldt.format(dtf);

System.out.println(strDate);

System.out.println("----------------------------");

DateTimeFormatterdtf2=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");

StringstrDate2=dtf2.format(ldt);

System.out.println(strDate2);

System.out.println("-----------------------------");

LocalDateTimenewDate=ldt.parse(strDate2,dtf2);

System.out.println(newDate);

   }


6、TimeZone 时区处理

// 时区的处理

publicstaticvoidtestTimeZone(){

LocalDateTimeldt=LocalDateTime.now(ZoneId.of("Europe/Dublin"));

System.out.println(ldt);

LocalDateTimeldt2=LocalDateTime.now(ZoneId.of("Europe/Dublin"));

ZonedDateTimezdt=ldt2.atZone(ZoneId.of("Europe/Dublin"));

System.out.println(zdt);

   }

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

你可能感兴趣的:(乐字节-Java8新特性之Date API)