java8新特性——时间日期API

  传统的时间 API 存在线程安全的问题,在多线程开发中必须要上锁,所以 java8 现在为我们提供了一套全新的时间日期 API ,今天进来学习一下java8 的时间日期 API。

一、使用 LocalDate、LocalTime、LocalDateTime

  LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601 (ISO-8601 日历系统是国际化组织制定的现代化公民的日期和时间的表达法)日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前时间的时间信息。也不包含与时区相关的信息。

  LocalDate LocalTime LocalDateTime 三个类的使用方式一样,只是代表的不同而已。

  下面就以LocalDateTime作为例子进行示范:

    1.获取当前时间

1     /**
2      * 获取当前时间
3      */
4     @Test
5     public void test1() {
6         LocalDateTime now = LocalDateTime.now();
7     }

    

    2.获取指定时间日期

1     /**
2      * 获取指定时间日期
3      */
4     @Test
5     public void test2() {
6         LocalDateTime now = LocalDateTime.of(2018, 6, 10, 10, 10, 10);
7     }

   

    3.对时间进行加减操作

 1     /**
 2      * 对时间进行加减操作
 3      */
 4     @Test
 5     public void test3() {
 6         LocalDateTime now = LocalDateTime.of(2018, 6, 10, 10, 10, 10);
 7         //加时间
 8         LocalDateTime time1 = now.plusYears(1).plusMonths(2).
 9                 plusDays(3).plusHours(5).plusMinutes(45).
10                 plusSeconds(32);
11         //剪时间
12         LocalDateTime time2 = now.minusYears(1).minusMonths(2).
13                 minusDays(3).minusHours(5).minusMinutes(45).
14                 minusSeconds(32);
15     }

  对旧的时间进行操作之后返回一个新的时间。

    

    4. 获取获取时间的年、月、日

 1     /**
 2      * 获取时间的年、月、日
 3      */
 4     @Test
 5     public void test4() {
 6         LocalDateTime now = LocalDateTime.of(2018, 6, 10, 10, 10, 10);
 7         //获取年
 8         int year = now.getYear();
 9         //获取月
10         Month month = now.getMonth();
11         //获取月的value值
12         int monthValue = now.getMonthValue();
13         //获取在本月的第几天(日)
14         int dayOfMonth = now.getDayOfMonth();
15         //获取在本年的第几天
16         int dayOfYear = now.getDayOfYear();
17         //获取在本周的第几天(星期几)
18         DayOfWeek dayOfWeek = now.getDayOfWeek();
19         //获取小时
20         int hour = now.getHour();
21         //获取分钟
22         int minute = now.getMinute();
23         //获取秒
24         int second = now.getSecond();
25         //获取纳秒
26         int nano = now.getNano();27     }

二、使用 Instant : 时间戳(以Unix 元年 : 1970-01-01 00:00:00 到某个时间之间的毫秒数)

  1. 获取系统当前时间

1     /**
2      * 获取当前时间 默认获取 UTC 时区
3      */
4     @Test
5     public void test5() {
6         Instant now = Instant.now();
7     }

  上面时间默认获取到的是 UTC 时区的时间,与中国时间相差8小时,我们可以给它设置偏移量。

1     /**
2      * 获取中国当前时间
3      */
4     @Test
5     public void test6() {
6         Instant now = Instant.now().
7                 atOffset(ZoneOffset.ofHours(8)).toInstant();
8     }

  2. 获取当前时间的时间戳

1     /**
2      * 获取中国当前时间戳
3      */
4     @Test
5     public void test7() {
6         long now = Instant.now().
7                 atOffset(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
8     }

三、Duration 计算两个时间之间的间隔

 1     /**
 2      * 获取两个时间之间的间隔
 3      */
 4     @Test
 5     public void test8() {
 6         Instant now1 = Instant.now();
 7         Instant now2 = Instant.now().
 8                 atOffset(ZoneOffset.ofHours(8)).toInstant();
 9         Duration.between(now1, now2);
10         
11         LocalDateTime now3 = LocalDateTime.now();
12         LocalDateTime now4 = LocalDateTime.of(2018, 6, 10, 10, 10, 10);
13         
14         Duration.between(now3, now4);
15     }

四、Period 计算两个日期之间的间隔

 1     /**
 2      * 获取两个日期之间的间隔
 3      */
 4     @Test
 5     public void test9() {
 6         LocalDate now1 = LocalDate.now();
 7         LocalDate now2 = LocalDate.of(2018, 6, 10);
 8         
 9         Period.between(now1, now2);
10     }

  

猜你喜欢

转载自www.cnblogs.com/wuyx/p/9164502.html