老鬼的博客 来都来啦,那就随便看看吧~
localdatetime常用方法
发布于: 2022-06-09 更新于: 2022-06-09 分类于:  阅读次数: 

一:介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.8 之前 JDK 自带的日期处理类非常不方便,处理的时候经常是使用的第三方工具包,比如 commons-lang 包等。
不过 1.8 出现之后这个改观了很多,比如日期时间的创建、比较、调整、格式化、时间间隔等。这些类都在
java.time包下。比原来实用了很多。
LocalDate/LocalTime/LocalDateTime
LocalDate 为日期处理类、LocalTime 为时间处理类、
LocalDateTime 为日期时间处理类,方法都类似,具体可以看 API 文档或源码,选取几个代表性的方法做下介绍:

now 相关的方法可以获取当前日期或时间,of 方法可以创建对应的日期或时间,parse 方法可以解析日期或时间,
get 方法可以获取日期或时间信息,with 方法可以设置日期或时间信息,plus 或 minus 方法可以增减日期或时间信息。

TemporalAdjusters
这个类在日期调整时非常有用,比如得到当月的第一天、最后一天,当年的第一天、最后一天,下一周或前一周的某天等。

DateTimeFormatter
以前日期格式化一般用 SimpleDateFormat 类,但是不怎么好用,现在 1.8 引入了 DateTimeFormatter 类,默认定义了
很多常量格式(ISO打头的),在使用的时候一般配合 LocalDate/LocalTime/LocalDateTime 使用,比如想把当前日期格式
化成 yyyy-MM-dd hh:mm:ss 的形式:

二:完整工具类

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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
package com.tohours.wechatapi.test.jdk8;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

/**
* @desc 日期时间的新方法
* @author RenJie
* @date 2022-06-09
*
*/
@Slf4j
public class LocalDateTimeUtils {

/**
* @desc localDate日期转字符串
* @param date localDate的日期
* @param format 格式化字符串
* @return
*/
public static String localDate2String(LocalDate date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
String result = dtf.format(date);
log.info("result:" + result);
return result;
}

/**
* @desc localDate日期转字符串,format默认是yyyy-MM-dd
* @param date
* @return
*/
public static String localDate2String(LocalDate date) {
return localDate2String(date, "yyyy-MM-dd");
}

/**
* @desc 字符串转成localDate
* @param dateStr 日期字符串
* @param format 格式化字符串
* @return
*/
public static LocalDate string2LocalDate(String dateStr, String format) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
LocalDate date = LocalDate.parse(dateStr, df);
return date;
}

/**
* @desc 字符串转成localDate , 默认格式化是yyyy-MM-dd
* @param dateStr 日期字符串
* @return
*/
public static LocalDate string2LocalDate(String dateStr) {
return string2LocalDate(dateStr, "yyyy-MM-dd");
}

/**
* @desc localDateTime转字符串
* @param dateTime 日期+时间
* @param format 格式化字符串
* @return
*/
public static String localDateTime2String(LocalDateTime dateTime, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
String result = dtf.format(dateTime);
log.info("result:" + result);
return result;
}

/**
* @desc localDateTime转字符串 , 默认格式化是yyyy-MM-dd HH:mm:ss
* @param dateTime 日期+时间
* @return
*/
public static String localDateTime2String(LocalDateTime dateTime) {
return localDateTime2String(dateTime, "yyyy-MM-dd HH:mm:ss");
}

/**
* @desc 字符串转成localDateTime
* @param dateTimeStr 日期+时间字符串
* @param format 格式化字符串
* @return
*/
public static LocalDateTime string2LocalDateTime(String dateTimeStr, String format) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, df);
return dateTime;
}

/**
* @desc 字符串转成localDateTime , 默认格式化值是yyyy-MM-dd HH:mm:ss
* @param dateTimeStr 日期+时间字符串
* @return
*/
public static LocalDateTime string2LocalDateTime(String dateTimeStr) {
return string2LocalDateTime(dateTimeStr, "yyyy-MM-dd HH:mm:ss");
}

/**
* @desc localTime转字符串
* @param time 时间
* @param format 格式化字符串
* @return
*/
public static String localTime2String(LocalTime time, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
String result = dtf.format(time);
log.info("result:" + result);
return result;
}

/**
* @desc localTime转字符串 , 默认格式化字符串是:HH:mm:ss
* @param time 时间
* @return
*/
public static String localTime2String(LocalTime time) {
return localTime2String(time, "HH:mm:ss");
}

/**
* @desc 字符串转localTime
* @param timeStr 时间字符串
* @param format 格式化值
* @return
*/
public static LocalTime string2LocalTime(String timeStr, String format) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
LocalTime localTime = LocalTime.parse(timeStr, df);
return localTime;
}

/**
* @desc 字符串转localTime 默认格式化字符串是HH:mm:ss
* @param timeStr 时间字符串
* @return
*/
public static LocalTime string2LocalTime(String timeStr) {
return string2LocalTime(timeStr, "HH:mm:ss");
}

/**
* @desc 时间转json,里面包含了年月日时分秒星期等信息
* @param dateTime
* @return
*/
public static JSONObject localDateTime2Json(LocalDateTime dateTime) {
JSONObject rv = new JSONObject();
rv.put("year", dateTime.getYear());// 年
rv.put("month", dateTime.getMonthValue());// 月
rv.put("day", dateTime.getDayOfMonth());// 日
rv.put("hour", dateTime.getHour());// 小时
rv.put("minute", dateTime.getMinute());// 分钟
rv.put("second", dateTime.getSecond());// 秒
rv.put("week", dateTime.getDayOfWeek().getValue());// 星期
log.info("json:" + rv.toString());
return rv;
}

/**
* @desc 获取年份
* @param dateTime
* @return
*/
public static Integer loadYear(LocalDateTime dateTime) {
return dateTime.getYear();
}

/**
* @desc 获取月份
* @param dateTime
* @return
*/
public static Integer loadMonth(LocalDateTime dateTime) {
return dateTime.getMonthValue();
}

/**
* @desc 获取 日
* @param dateTime
* @return
*/
public static Integer loadDay(LocalDateTime dateTime) {
return dateTime.getDayOfMonth();
}

/**
* @desc 获取小时
* @param dateTime
* @return
*/
public static Integer loadHour(LocalDateTime dateTime) {
return dateTime.getSecond();
}

/**
* @desc 获取分钟
* @param dateTime
* @return
*/
public static Integer loadMinute(LocalDateTime dateTime) {
return dateTime.getMinute();
}

/**
* @desc 获取秒
* @param dateTime
* @return
*/
public static Integer loadSecond(LocalDateTime dateTime) {
return dateTime.getMinute();
}

/**
* @desc 获取星期
* @param dateTime
* @return
*/
public static Integer loadWeek(LocalDateTime dateTime) {
return dateTime.getDayOfWeek().getValue();
}

/**
* @desc 获取对应时间当前年的1月1号 0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2022-01-01
* 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadYearFirstDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.firstDayOfYear());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

/**
* @desc 获取对应时间当前年的最后一天 0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2022-12-31
* 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadYearEndDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.lastDayOfYear());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

/**
* @desc 获取对应时间下一年的1月1号 0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2023-01-01
* 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadNextYearFirstDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.firstDayOfNextYear());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

/**
* @desc 获取对应时间当前月的1号0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2022-06-01 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadMonthFirstDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.firstDayOfMonth());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

/**
* @desc 获取对应时间当前月的最后一天0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2022-06-30 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadMonthEndDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.lastDayOfMonth());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

/**
* @desc 获取对应时间下个月的1号0点的时间,如:入参是:2022-06-08 19:23:35,则返回值是:2022-07-01 00:00:00
* @param dateTime
* @return
*/
public static LocalDateTime loadNextMonthFirstDay(LocalDateTime dateTime) {
LocalDateTime dt = dateTime.with(TemporalAdjusters.firstDayOfNextMonth());
String timeStr = localDateTime2String(dt, "yyyy-MM-dd 00:00:00");
return string2LocalDateTime(timeStr);
}

public static void main(String[] args) {

LocalDateTime loadYearFirstDay = loadMonthEndDay(LocalDateTime.now());
localDateTime2String(loadYearFirstDay);

// localDate
LocalDate nowDate = LocalDate.now();
localDate2String(nowDate, "yyyyMMdd");
LocalDate date = string2LocalDate("2022-01-01");
localDate2String(date, "yyyyMMdd");

// localDateTime
LocalDateTime now = LocalDateTime.now();
localDateTime2String(now);
LocalDateTime localDateTime = string2LocalDateTime("2022-01-02 23:01:03");
localDateTime2String(localDateTime);

localDateTime2Json(now);

// 一周以后的时间
LocalDateTime ld2 = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
localDateTime2String(ld2);
// 月初的时间
ld2 = now.with(TemporalAdjusters.firstDayOfMonth());
localDateTime2String(ld2);
// 当前年 1月1号的时间
ld2 = now.with(TemporalAdjusters.firstDayOfYear());
localDateTime2String(ld2);

// localTime
LocalTime localTime = LocalTime.now();
localTime2String(localTime);

localTime = string2LocalTime("20:09:09");
localTime2String(localTime);

}
}
*************感谢您的阅读*************