1 package day2_15;
2
3 import org.junit.Test;
4
5 import java.time.Instant;
6 import java.time.LocalDateTime;
7 import java.time.OffsetDateTime;
8 import java.time.ZoneOffset;
9 import java.time.format.DateTimeFormatter;
10 import java.time.temporal.TemporalAccessor;
11
12 /**
13 * @Author Tianhao
14 * @create 2021-02-14-20:53
15 */
16 public class DateTimeTest {
17
18 @Test
19 public void testLocalDateTime() {
20 //LocalDateTime 类似于Calendar
21 //两种实例化方式
22 //方式一:now():当前日期时间
23 LocalDateTime now = LocalDateTime.now();
24 System.out.println(now);//2021-02-16T15:54:17.649
25 //方式二:of():指定日期时间
26 LocalDateTime past = LocalDateTime.of(2015, 6, 7, 11, 59, 59);
27 System.out.println(past);//2015-06-07T11:59:59
28 //获取相关属性
29 System.out.println(now.getDayOfMonth());//16
30 System.out.println(past.getMonthValue());//6
31
32 System.out.println("**********");
33 //对LocalDateTime操作(体现不变性)
34 //设置相关属性,返回一个新的日期时间对象
35 LocalDateTime now2 = now.withDayOfMonth(10);
36 LocalDateTime past2 = past.withMonth(5);
37 System.out.println(now2);//2021-02-10T16:02:34.914
38 System.out.println(past2);//2015-05-07T11:59:59
39 System.out.println(now.getDayOfMonth());//16
40 System.out.println(past.getMonthValue());//6
41
42 System.out.println("**********");
43 //增加相关属性值,返回一个新的日期时间对象
44 LocalDateTime now3 = now.plusDays(4);
45 LocalDateTime past3 = past.plusMonths(3);
46 System.out.println(now3);//2021-02-20T16:09:39.983
47 System.out.println(past3);//2015-09-07T11:59:59
48 System.out.println(now.getDayOfMonth());//16
49 System.out.println(past.getMonthValue());//6
50
51 System.out.println("**********");
52 //减少相关属性值,返回一个新的日期时间对象
53 LocalDateTime now4 = now.minusDays(8);
54 LocalDateTime past4 = past.minusMonths(3);
55 System.out.println(now4);//2021-02-08T16:13:43.328
56 System.out.println(past4);//2015-03-07T11:59:59
57 System.out.println(now.getDayOfMonth());//16
58 System.out.println(past.getMonthValue());//6
59 }
60
61 @Test
62 public void testInstant() {
63 //两种实例化方式
64 //方式一:本初子午线的标准时间
65 Instant now = Instant.now();
66 System.out.println(now);//2021-02-16T08:19:51.419Z
67 //中国处于东八区,所以小时需要加上8小时的偏移量
68 OffsetDateTime chinaNow = now.atOffset(ZoneOffset.ofHours(8));
69 System.out.println(chinaNow);//2021-02-16T16:19:51.419+08:00
70
71 //方式二:指定与1970年1月1日0时0秒0分的毫秒数差值来创建对象
72 Instant now2 = Instant.ofEpochMilli(0);
73 Instant now3 = Instant.ofEpochMilli(3600000L);
74 System.out.println(now2);//1970-01-01T00:00:00Z
75 System.out.println(now3);//1970-01-01T01:00:00Z
76
77 //对Instant操作
78 //获取当前时刻与1970年1月1日0时0秒0分的毫秒数差值
79 long milli = now.toEpochMilli();
80 System.out.println(milli);//1613464115414
81 }
82
83 @Test
84 public void testDateTimeFormatter() {
85 //有三种方式创建对象,这里只测常用的一种
86 //自定义格式器
87 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
88 //对DateTimeFormatter的操作
89 //格式化 LocalDateTime -->String
90 String str = formatter.format(LocalDateTime.now());
91 System.out.println(str);//2021-02-16 04:39:21
92 //解析 String--->LocalDateTime
93 TemporalAccessor localDateTime = formatter.parse("2021-02-16 04:39:21");
94 //{SecondOfMinute=21, NanoOfSecond=0, MicroOfSecond=0, MinuteOfHour=39, MilliOfSecond=0, HourOfAmPm=4},ISO resolved to 2021-02-16
95 System.out.println(localDateTime);
96 }
97
98 }