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