潘志宝
2024-11-19 977edcb50e46f57d5b8fdd4551736b1605fef6fc
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.common.util.date;
H 2
3 import cn.hutool.core.date.LocalDateTimeUtil;
d9f9ba 4 import org.joda.time.DateTime;
e7c126 5
d9f9ba 6 import java.text.ParseException;
H 7 import java.text.SimpleDateFormat;
e7c126 8 import java.time.*;
d9f9ba 9 import java.util.ArrayList;
e7c126 10 import java.util.Calendar;
H 11 import java.util.Date;
d9f9ba 12 import java.util.List;
e7c126 13
H 14 /**
15  * 时间工具类
16  *
17  * @author iailab
18  */
19 public class DateUtils {
20
21     /**
22      * 时区 - 默认
23      */
24     public static final String TIME_ZONE_DEFAULT = "GMT+8";
25
26     /**
27      * 秒转换成毫秒
28      */
29     public static final long SECOND_MILLIS = 1000;
30
31     public static final String FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd";
449017 32     /** 时间格式(yyyy.MM.dd) */
D 33     public final static String DATE_PATTERN_POINT = "yyyy.MM.dd";
e7c126 34
H 35     public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
d9f9ba 36
449017 37     public final static String DATE_TIME_PATTERN_STRING = "yyyyMMddHHmmss";
D 38
977edc 39     public static final String FORMAT_SIMPLE_TIME = "HH:mm";
40
d9f9ba 41     /**
H 42      * 日期格式化 日期格式为:yyyy-MM-dd
43      * @param date  日期
44      * @return  返回yyyy-MM-dd格式日期
45      */
46     public static String format(Date date) {
47         return format(date, FORMAT_YEAR_MONTH_DAY);
48     }
49
50     /**
51      * 日期格式化 日期格式为:yyyy-MM-dd
52      * @param date  日期
53      * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
54      * @return  返回yyyy-MM-dd格式日期
55      */
56     public static String format(Date date, String pattern) {
57         if(date != null){
58             SimpleDateFormat df = new SimpleDateFormat(pattern);
59             return df.format(date);
60         }
61         return null;
62     }
63
64     /**
65      * 日期解析
66      * @param date  日期
67      * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
68      * @return  返回Date
69      */
70     public static Date parse(String date, String pattern) {
71         try {
72             return new SimpleDateFormat(pattern).parse(date);
73         } catch (ParseException e) {
74             e.printStackTrace();
75         }
76         return null;
77     }
e7c126 78
H 79     /**
80      * 将 LocalDateTime 转换成 Date
81      *
82      * @param date LocalDateTime
83      * @return LocalDateTime
84      */
85     public static Date of(LocalDateTime date) {
86         if (date == null) {
87             return null;
88         }
89         // 将此日期时间与时区相结合以创建 ZonedDateTime
90         ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());
91         // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳
92         Instant instant = zonedDateTime.toInstant();
93         // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
94         return Date.from(instant);
95     }
96
97     /**
98      * 将 Date 转换成 LocalDateTime
99      *
100      * @param date Date
101      * @return LocalDateTime
102      */
103     public static LocalDateTime of(Date date) {
104         if (date == null) {
105             return null;
106         }
107         // 转为时间戳
108         Instant instant = date.toInstant();
109         // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
110         return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
111     }
112
113     public static Date addTime(Duration duration) {
114         return new Date(System.currentTimeMillis() + duration.toMillis());
115     }
116
117     public static boolean isExpired(LocalDateTime time) {
118         LocalDateTime now = LocalDateTime.now();
119         return now.isAfter(time);
120     }
121
122     /**
123      * 创建指定时间
124      *
125      * @param year  年
126      * @param mouth 月
127      * @param day   日
128      * @return 指定时间
129      */
130     public static Date buildTime(int year, int mouth, int day) {
131         return buildTime(year, mouth, day, 0, 0, 0);
132     }
133
134     /**
135      * 创建指定时间
136      *
137      * @param year   年
138      * @param mouth  月
139      * @param day    日
140      * @param hour   小时
141      * @param minute 分钟
142      * @param second 秒
143      * @return 指定时间
144      */
145     public static Date buildTime(int year, int mouth, int day,
146                                  int hour, int minute, int second) {
147         Calendar calendar = Calendar.getInstance();
148         calendar.set(Calendar.YEAR, year);
149         calendar.set(Calendar.MONTH, mouth - 1);
150         calendar.set(Calendar.DAY_OF_MONTH, day);
151         calendar.set(Calendar.HOUR_OF_DAY, hour);
152         calendar.set(Calendar.MINUTE, minute);
153         calendar.set(Calendar.SECOND, second);
154         calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒
155         return calendar.getTime();
156     }
157
158     public static Date max(Date a, Date b) {
159         if (a == null) {
160             return b;
161         }
162         if (b == null) {
163             return a;
164         }
165         return a.compareTo(b) > 0 ? a : b;
166     }
167
168     public static LocalDateTime max(LocalDateTime a, LocalDateTime b) {
169         if (a == null) {
170             return b;
171         }
172         if (b == null) {
173             return a;
174         }
175         return a.isAfter(b) ? a : b;
176     }
177
178     /**
179      * 是否今天
180      *
181      * @param date 日期
182      * @return 是否
183      */
184     public static boolean isToday(LocalDateTime date) {
185         return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now());
186     }
187
188     /**
189      * 是否昨天
190      *
191      * @param date 日期
192      * @return 是否
193      */
194     public static boolean isYesterday(LocalDateTime date) {
195         return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1));
196     }
197
d9f9ba 198     public static List<String> getTimeScale(Date startDate, Date endDate, int seconds) {
H 199         List<String> days = new ArrayList<String>();
200         Calendar calendar = Calendar.getInstance();
201         calendar.setTime(startDate);
202         while (calendar.getTime().compareTo(endDate) <= 0) {
a2aa90 203             days.add(DateUtils.format(calendar.getTime(), FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
d9f9ba 204             calendar.add(Calendar.SECOND, seconds);
H 205         }
206         return days;
207     }
208
977edc 209     public static List<String> getTimeScale(Date startDate, Date endDate, int seconds, String timeFormat) {
210         List<String> days = new ArrayList<String>();
211         Calendar calendar = Calendar.getInstance();
212         calendar.setTime(startDate);
213         while (calendar.getTime().compareTo(endDate) <= 0) {
214             days.add(DateUtils.format(calendar.getTime(), timeFormat));
215             calendar.add(Calendar.SECOND, seconds);
216         }
217         return days;
218     }
219
d9f9ba 220     /**
H 221      * 对日期的【秒】进行加/减
222      *
223      * @param date 日期
224      * @param seconds 秒数,负数为减
225      * @return 加/减几秒后的日期
226      */
227     public static Date addDateSeconds(Date date, int seconds) {
228         DateTime dateTime = new DateTime(date);
229         return dateTime.plusSeconds(seconds).toDate();
230     }
231
232     /**
233      * 对日期的【分钟】进行加/减
234      *
235      * @param date 日期
236      * @param minutes 分钟数,负数为减
237      * @return 加/减几分钟后的日期
238      */
239     public static Date addDateMinutes(Date date, int minutes) {
240         DateTime dateTime = new DateTime(date);
241         return dateTime.plusMinutes(minutes).toDate();
242     }
243
244     /**
245      * 对日期的【小时】进行加/减
246      *
247      * @param date 日期
248      * @param hours 小时数,负数为减
249      * @return 加/减几小时后的日期
250      */
251     public static Date addDateHours(Date date, int hours) {
252         DateTime dateTime = new DateTime(date);
253         return dateTime.plusHours(hours).toDate();
254     }
255
256     /**
257      * 对日期的【天】进行加/减
258      *
259      * @param date 日期
260      * @param days 天数,负数为减
261      * @return 加/减几天后的日期
262      */
263     public static Date addDateDays(Date date, int days) {
264         DateTime dateTime = new DateTime(date);
265         return dateTime.plusDays(days).toDate();
266     }
267
268     /**
269      * 对日期的【周】进行加/减
270      *
271      * @param date 日期
272      * @param weeks 周数,负数为减
273      * @return 加/减几周后的日期
274      */
275     public static Date addDateWeeks(Date date, int weeks) {
276         DateTime dateTime = new DateTime(date);
277         return dateTime.plusWeeks(weeks).toDate();
278     }
279
280     /**
281      * 对日期的【月】进行加/减
282      *
283      * @param date 日期
284      * @param months 月数,负数为减
285      * @return 加/减几月后的日期
286      */
287     public static Date addDateMonths(Date date, int months) {
288         DateTime dateTime = new DateTime(date);
289         return dateTime.plusMonths(months).toDate();
290     }
291
292     /**
293      * 对日期的【年】进行加/减
294      *
295      * @param date 日期
296      * @param years 年数,负数为减
297      * @return 加/减几年后的日期
298      */
299     public static Date addDateYears(Date date, int years) {
300         DateTime dateTime = new DateTime(date);
301         return dateTime.plusYears(years).toDate();
302     }
303
e7c126 304 }