1 package day2_14;
2
3 import org.junit.Test;
4
5 import java.time.*;
6 import java.time.format.DateTimeFormatter;
7 import java.time.format.FormatStyle;
8 import java.time.temporal.TemporalAccessor;
9
10 /**
11 * @Author Tianhao
12 * @create 2021-02-14-21:47
13 */
14 public class JDK8DateTimeTest {
15
16 /*
17 LocalDate、LocalTime、LocalDateTime 的使用
18 说明:
19 1.LocalDateTime用的多一些
20 2.类似于Calendar
21 */
22
23 @Test
24 public void test1() {
25 //两种实例化方式
26
27 //第一种:now():获取当前日期、时间、或者日期+时间来创建对象
28 LocalDate localDate = LocalDate.now();
29 LocalTime localTime = LocalTime.now();
30 LocalDateTime localDateTime = LocalDateTime.now();
31 System.out.println(localDate);//2021-02-14
32 System.out.println(localTime);//22:11:01.820
33 System.out.println(localDateTime);//2021-02-14T22:11:01.820
34
35 //第二种:of():设置指定的年、月、日、时、分、秒。没有偏移量
36 LocalDateTime localDateTime1 = LocalDateTime.of(2021, 2, 18, 13, 14, 59);
37 System.out.println(localDateTime1);//2021-02-18T13:14:59
38
39 System.out.println("**************");
40 //getXxx() 获得相关的属性
41 System.out.println(localDateTime.getDayOfMonth());
42 System.out.println(localDateTime.getDayOfWeek()); //SUNDAY
43 System.out.println(localDateTime.getDayOfYear());
44 System.out.println(localDateTime.getMinute());
45 System.out.println(localDateTime.getMonth());//FEBRUARY
46 System.out.println(localDateTime.getMonthValue());//2
47
48 System.out.println("****************");
49 //下面都体现不可变性
50 //withXxx() 设置相关的属性
51 LocalDateTime localDateTime2 = localDateTime.withDayOfMonth(28);
52 System.out.println(localDateTime);//2021-02-14T22:13:00.105
53 System.out.println(localDateTime2);//2021-02-28T22:13:00.105
54
55 LocalDateTime localDateTime3 = localDateTime.withHour(4);
56 System.out.println(localDateTime);//2021-02-14T22:16:14.357
57 System.out.println(localDateTime3);//2021-02-14T04:16:14.357
58
59 System.out.println("****************");
60 //增加相关属性值
61 LocalDateTime localDateTime4 = localDateTime.plusMonths(3);
62 System.out.println(localDateTime);//2021-02-14T22:19:52.258
63 System.out.println(localDateTime4);//2021-05-14T22:19:52.258
64
65 //减少相关属性值
66 LocalDateTime localDateTime5 = localDateTime.minusDays(6);
67 System.out.println(localDateTime);//2021-02-14T22:22:18.514
68 System.out.println(localDateTime5);//2021-02-08T22:22:18.514
69 }
70
71
72 /*
73 Instant:瞬时类
74 类似于java.util.Date类
75 */
76
77 @Test
78 public void test2() {
79 //创建对象方式一:
80 //now():获取本初子午线对应的标准时间
81 Instant instant = Instant.now();
82 System.out.println(instant);//2021-02-14T14:39:03.994Z
83
84 //中国在东八区,时钟需要加上8小时的偏移量
85 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
86 System.out.println(offsetDateTime);//2021-02-14T22:39:03.994+08:00
87
88 //toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
89 //类似于Date类的getTime()
90 long milli = instant.toEpochMilli();
91 System.out.println(milli);//1613313872550
92
93 System.out.println("***************");
94 //创建对象方式二:
95 //ofEpochMilli():通过给定的毫秒数获取一个Instant实例
96 //类似于Date(Long millis)构造器
97 Instant instant1 = Instant.ofEpochMilli(1613313872550L);
98 System.out.println(instant1);//2021-02-14T14:44:32.550Z
99 }
100
101 /*
102 DateTimeFormatter:格式化或解析日期、时间
103 类似于SimpleDateFormat
104 */
105 @Test
106 public void test3 () {
107
108 //3种实例化方式
109 //方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
110 DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
111 LocalDateTime localDateTime = LocalDateTime.now();
112 //格式化:日期--->字符串
113 String str = formatter.format(localDateTime);
114 System.out.println(localDateTime);//2021-02-15T13:08:53.245 --LocalDateTime类型
115 System.out.println(str);//2021-02-15T13:08:53.245 --String类型
116
117 //解析:字符串-->日期
118 //TemporalAccessor接口,这里是多态
119 TemporalAccessor parse = formatter.parse("2021-02-15T13:08:53.245");
120 System.out.println(parse);//{},ISO resolved to 2021-02-15T13:08:53.245
121
122 System.out.println("***************");
123 //方式二:本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
124 DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
125 String str2 = formatter2.format(localDateTime);
126 System.out.println(str2);//2021年2月15日 下午01时21分21秒
127 TemporalAccessor parse2 = formatter2.parse("2021年2月14日 下午03时59分59秒");
128 System.out.println(parse2);//
129
130 System.out.println("***************");
131 //重点:方式三:自定义的格式,如:ofPattern("yyyy-MM-dd hh-mm-ss")
132 DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
133 //格式化
134 String str3 = formatter3.format(localDateTime);
135 System.out.println(str3);//2021-02-15 01:36:11
136 //解析
137 TemporalAccessor parse3 = formatter3.parse("2021-02-15 02:59:59");
138 System.out.println(parse3);
139 //{NanoOfSecond=0, MicroOfSecond=0, HourOfAmPm=2, MinuteOfHour=59, MilliOfSecond=0, SecondOfMinute=59},ISO resolved to 2021-02-15
140
141
142 }
143 }