LocalDate、LocalTime、Period、Duration等

一、新的Date API介绍

jdk以前的java.util.Date存在的问题

1)比如new Date(119, 2, 18)表示Mon Mar 18 00:00:00 CST 2019,2019年3月18日,year要从1900年加起,month是从0开始,day是从1开始。

2)SimpleDateFormat不是线程安全的,比如多线程情况下simpleDateFormat.parse会出问题。

3)Date名字叫日期,但是后面还有time时间

 

例子如下:

 1 package com.cy.java8;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 
 7 public class DateTest {
 8 
 9     public static void main(String[] args) throws ParseException {
10         Date date = new Date(119, 2, 18);
11         System.out.println(date);
12 
13         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
14         for(int i=0; i<5; i++){
15             new Thread(()->{
16                 try {
17                     Date parseDate = sdf.parse("20190505");
18                     System.out.println(parseDate);
19                 } catch (ParseException e) {
20                     e.printStackTrace();
21                 }
22 
23             }).start();
24         }
25     }
26 }

 

二、LocalDate      

 1 package com.cy.java8;
 2 
 3 import java.time.LocalDate;
 4 import java.time.temporal.ChronoField;
 5 
 6 public class DateTest {
 7 
 8     public static void main(String[] args) {
 9         testLocalDate();
10     }
11 
12     /**
13      * LocalDate是线程安全的
14      */
15     private static void testLocalDate(){
16         LocalDate localDate = LocalDate.of(2019, 10, 2);
17         System.out.println(localDate.getYear());
18         System.out.println(localDate.getMonth());
19         System.out.println(localDate.getMonthValue());
20         System.out.println(localDate.getDayOfYear());
21         System.out.println(localDate.getDayOfMonth());
22         System.out.println(localDate.getDayOfWeek());
23 
24         System.out.println(localDate.get(ChronoField.YEAR));
25         System.out.println(localDate.get(ChronoField.MONTH_OF_YEAR));
26         System.out.println(localDate.get(ChronoField.DAY_OF_MONTH));
27 
28         LocalDate now = LocalDate.now();
29         System.out.println(now);
30     }
31 }

 

console:

2019
OCTOBER
10
275
2
WEDNESDAY
2019
10
2
2019-10-02

 

三、LocalTime、Instant、Duration、Period简单介绍

 

 1 package com.test.localdate;
 2 
 3 import java.time.*;
 4 
 5 public class DateTest {
 6 
 7     public static void main(String[] args) throws InterruptedException {
 8         System.out.println("===========testLocalTime======================");
 9         testLocalTime();
10 
11         System.out.println("===========testCombineLocalDateAndTime======================");
12         testCombineLocalDateAndTime();
13 
14         System.out.println("==============testInstant===================");
15         testInstant();
16 
17         System.out.println("============testDurarion=====================");
18         testDuration();
19 
20         System.out.println("============testPeriod=====================");
21         testPeriod();
22     }
23 
24     private static void testLocalTime(){
25         LocalTime time = LocalTime.now();
26         System.out.println(time);
27 
28         System.out.println(time.getHour());
29         System.out.println(time.getMinute());
30         System.out.println(time.getSecond());
31     }
32 
33     private static void testCombineLocalDateAndTime(){
34         LocalDate localDate = LocalDate.now();
35         LocalTime time = LocalTime.now();
36         LocalDateTime localDateTime = LocalDateTime.of(localDate, time);
37         System.out.println(localDateTime);
38 
39         LocalDateTime now = LocalDateTime.now();
40         System.out.println(now);
41     }
42 
43     private static void testInstant() throws InterruptedException {
44         Instant start = Instant.now();
45         Thread.sleep(1000);
46         Instant end = Instant.now();
47 
48         Duration duration = Duration.between(start, end);   //类似于之前的System.currentTimeMillis
49         System.out.println(duration.toMillis());
50     }
51 
52     private static void testDuration(){
53         LocalTime time = LocalTime.now();
54         LocalTime beforeTime = time.minusHours(1);
55         Duration duration = Duration.between(time, beforeTime);
56         System.out.println(duration.toHours());
57     }
58 
59     private static void testPeriod(){
60         Period period = Period.between(LocalDate.of(2017, 10, 1), LocalDate.of(2019, 1, 2));
61         System.out.println(period.getYears());
62         System.out.println(period.getMonths());
63         System.out.println(period.getDays());
64     }
65 }

console:

===========testLocalTime======================
10:00:45.739
10
0
45
===========testCombineLocalDateAndTime======================
2021-10-10T10:00:45.740
2021-10-10T10:00:45.740
==============testInstant===================
1004
============testDurarion=====================
-1
============testPeriod=====================
1
3
1

 

四、formatter、parse

 1 package com.cy.java8;
 2 
 3 import java.time.*;
 4 import java.time.format.DateTimeFormatter;
 5 
 6 public class DateTest {
 7 
 8     public static void main(String[] args){
 9         testDateFormat();
10         System.out.println("==============================");
11 
12         testDateParse();
13     }
14 
15     private static void testDateFormat(){
16         LocalDate localDate = LocalDate.now();
17         String format1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
18         System.out.println(format1);
19 
20         String format2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
21         System.out.println(format2);
22 
23         DateTimeFormatter myFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
24         String format3 = localDate.format(myFormatter);
25         System.out.println(format3);
26     }
27 
28     private static void testDateParse(){
29         String date0 = "20191002";
30         LocalDate localDate0 = LocalDate.parse(date0, DateTimeFormatter.BASIC_ISO_DATE);
31         System.out.println(localDate0);
32 
33         String date1 = "2019-10-02";
34         LocalDate localDate1 = LocalDate.parse(date1, DateTimeFormatter.ISO_LOCAL_DATE);
35         System.out.println(localDate1);
36 
37         String date2 = "2019年10月02日";
38         LocalDate localDate2 = LocalDate.parse(date2, DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
39         System.out.println(localDate2);
40     }
41 }

console:

20191002
2019-10-02
2019年10月02日
==============================
2019-10-02
2019-10-02
2019-10-02

 

 

 

 

例子1:使用LocalDateTime进行时间格式的格式化

 1 package com.mayikt.mytest.datetimeformatter;
 2 
 3 import java.time.LocalDate;
 4 import java.time.LocalDateTime;
 5 import java.time.LocalTime;
 6 import java.time.format.DateTimeFormatter;
 7 
 8 public class TestLocalDateTime {
 9 
10     /**
11      * 将yyyy-MM-dd HH:mm:ss 转化为yyyy年mm月dd日 HH时mm分ss秒 格式
12      *
13      * @param args
14      */
15     public static void main(String[] args) {
16         String string = "2021-05-14 16:10:32";
17         System.out.println(formatDateTime1(string));
18         System.out.println(formatDateTime2(string));
19     }
20 
21     public static String formatDateTime2(String dateStr) {
22         LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
23         String result = localDateTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
24         return result;
25     }
26 
27     public static String formatDateTime1(String dateStr) {
28         String[] strArray = dateStr.split(" ");
29         LocalDate localDate = LocalDate.parse(strArray[0], DateTimeFormatter.ISO_LOCAL_DATE);
30         LocalTime localTime = LocalTime.parse(strArray[1], DateTimeFormatter.ofPattern("HH:mm:ss"));
31         LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
32         return localDateTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
33     }
34 }

console:

2021年05月14日 16时10分32秒
2021年05月14日 16时10分32秒

 

 

----

posted on 2019-10-02 20:06  有点懒惰的大青年  阅读(762)  评论(0编辑  收藏  举报