-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsection.java.time.xml
More file actions
173 lines (161 loc) · 5.87 KB
/
section.java.time.xml
File metadata and controls
173 lines (161 loc) · 5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?xml version="1.0" encoding="UTF-8"?>
<chapter id="index"><?dbhtml dir="time" ?>
<title>时间</title>
<para>Period 与 Duration
类的作用就不需要你自己复杂的计算关于两个年月日之间的相差的时间或日期,都是一段持续时间的概念,如果需要对比时间,它们就需要一个固定的时间值,所以就需要
LocalDate 类与 Instant 类来配合它们使用:
</para>
<para>Period 对应使用 LocalDate ,它们的作用范围域都是日期(年/月/日);Duration 对应使用
Instant,它们的作用范围域都是时间(天/时/分/秒/毫秒/纳秒)
</para>
<section id="LocalDate">
<title>LocalDate</title>
<para>精度到日期记录固定时间值的LocalDate,创建方式:</para>
<programlisting>
<![CDATA[
LocalDate localDate1 = LocalDate.of(2019,9,1);
LocalDate localDate2 = LocalDate.ofYearDay(2019,150);
]]>
</programlisting>
</section>
<section id="LocalTime">
<title>LocalTime</title>
<programlisting>
<![CDATA[
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm:ss");
LocalTime lt = LocalTime.now();
System.out.println(dtf.format(lt)); //08:03:32
dtf = DateTimeFormatter.ofPattern("hh:mm:ss a");
lt = LocalTime.now();
System.out.println(dtf.format(lt)); //08:03:32 PM
dtf = DateTimeFormatter.ofPattern("HH:mm");
lt = LocalTime.now();
System.out.println(dtf.format(lt)); //20:03
]]>
</programlisting>
</section>
<section id="ZonedDateTime">
<title>ZonedDateTime</title>
<programlisting>
<![CDATA[
Date.from(java.time.ZonedDateTime.now().toInstant());
]]>
</programlisting>
</section>
<section id="DateTimeFormatter">
<title>DateTimeFormatter</title>
<programlisting>
<![CDATA[
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");
String dateTime = formatter.format(LocalDateTime.now());
System.out.println(dateTime);
LocalDateTime ldt = LocalDateTime.parse("2018-Dec-20 08:25:30", formatter);
System.out.println(ldt);
]]>
</programlisting>
</section>
<section id="Instant">
<title>Instant</title>
<para>以精度到纳秒记录固定的时间值的Instant,创建方式:</para>
<programlisting>
<![CDATA[
Instant instant1 = Instant.parse("2017-10-03T10:15:30.00Z");//用解析字符串的形式创建
Instant instant2 = Instant.ofEpochMilli(System.currentTimeMillis());//用传入单位为毫秒的时间戳创建
Instant instant3 = Instant.ofEpochSecond(System.currentTimeMillis()/1000);//用传入为单位秒的
]]>
</programlisting>
</section>
<section id="Period">
<title>Period :基于日期值</title>
<para>对比时间</para>
<programlisting>
<![CDATA[
Period fromUnits = Period.of(3, 10, 10);
Period fromDays = Period.ofDays(50);
Period fromMonths = Period.ofMonths(5);
Period fromYears = Period.ofYears(10);
Period fromWeeks = Period.ofWeeks(40);
]]>
</programlisting>
<programlisting>
<![CDATA[
LocalDate start = LocalDate.of(2019,9,25);
LocalDate end = LocalDate.of(2019,9,29);
Period period = Period.between(start, end);
System.out.println("相差天数="+period.getDays());
]]>
</programlisting>
</section>
<section id="Duration">
<title>Duration:基于时间值</title>
<para>Duration字面意思是持续时间</para>
<programlisting>
<![CDATA[
Duration duration = Duration.ofSeconds(30);
使用between()方法创建Duration对象,计算两个时间点之间的时间间隔。例如:
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = start.plusMinutes(15);
Duration duration = Duration.between(start, end);
Duration duration = Duration.ofMinutes(30);
long minutes = duration.toMinutes(); // 获取时间间隔的分钟数
Duration halfDay = Duration.ofHours(12);
Duration updatedDuration = duration.plusMinutes(15); // 增加15分钟的时间间隔
boolean isNegative = duration.isNegative(); // 判断是否为负时间间隔
]]>
</programlisting>
<section>
<title>设置指定单位的持续时间</title>
<programlisting>
<![CDATA[
Duration durationDays = Duration.ofDays(1);//天
Duration durationHours = Duration.ofHours(1);//小时
Duration durationMinutes = Duration.ofMinutes(1);//分
Duration durationSeconds = Duration.ofSeconds(1);//秒
Duration durationMillis = Duration.ofMillis(1);//毫秒
]]>
</programlisting>
</section>
<section>
<title>获取指定单位的持续时间</title>
<programlisting>
<![CDATA[
Duration duration = Duration.ofDays(1);//设置一天时间
long timeHours = duration.toHours();//小时
long timeMinutes = duration.toMinutes();//分钟
long timeMillis = duration.toMillis();//毫秒
long timeNanos = duration.toNanos();//纳秒
String timeString = duration.toString(); //此持续时间的字符串表示形式,使用基于ISO-8601秒*的表示形式,例如 PT8H6M12.345S
System.out.println("timeHours时间="+timeHours);
System.out.println("timeMinutes时间="+timeMinutes);
System.out.println("timeMillis时间="+timeMillis);
System.out.println("timeNanos时间="+timeNanos);
System.out.println("timeString时间="+timeString);
]]>
</programlisting>
</section>
<section>
<title>获取两个时间点之间差值的持续时间</title>
<programlisting>
<![CDATA[
long todayTimeMillis = System.currentTimeMillis();
long yesterdayTimeMillis = todayTimeMillis - 24 * 60 * 60 * 1000;
Instant start = Instant.ofEpochMilli(yesterdayTimeMillis);
Instant end = Instant.ofEpochMilli(todayTimeMillis);
Duration duration = Duration.between(start, end);
System.out.println("天数="+duration.toDays());
注意这个天数是可以负数,意味着如果开始时间比结束时间更后面就会得到负数天数
]]>
</programlisting>
</section>
<section id="toMillis">
<title>获取毫秒</title>
<programlisting>
<![CDATA[
Duration duration = Duration.ofSeconds(1);
long timeMillis = duration.toMillis();
System.out.println(timeMillis);
]]>
</programlisting>
</section>
</section>
</chapter>