Jay
2024-11-25 ee9f604388a3e77d3f4654e326f3976552e7f532
提交 | 用户 | 时间
4d3533 1 /**
2  * Copyright (c) 2018 人人开源 All rights reserved.
3  *
4  * https://www.renren.io
5  *
6  * 版权所有,侵权必究!
7  */
8
9 package com.iailab.module.data.common.utils;
10
11 import org.apache.commons.lang3.StringUtils;
12 import org.joda.time.DateTime;
13 import org.joda.time.LocalDate;
14 import org.joda.time.format.DateTimeFormat;
15 import org.joda.time.format.DateTimeFormatter;
16
17 import java.text.ParseException;
18 import java.text.SimpleDateFormat;
19 import java.util.ArrayList;
20 import java.util.Calendar;
21 import java.util.Date;
22 import java.util.List;
23
24 /**
25  * 日期处理
26  * 
27  * @author Mark sunlightcs@gmail.com
28  */
29 public class DateUtils {
30     /** 时间格式(yyyy-MM-dd) */
31     public final static String DATE_PATTERN = "yyyy-MM-dd";
32     /** 时间格式(yyyy-MM-dd HH:mm:ss) */
33     public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
ed4f78 34     /** 时间格式(yyyyMMddHHmmss) */
35     public final static String DATE_NUMBER_PATTERN = "yyyyMMddHHmmss";
4d3533 36
37     /**
38      * 日期格式化 日期格式为:yyyy-MM-dd
39      * @param date  日期
40      * @return  返回yyyy-MM-dd格式日期
41      */
42     public static String format(Date date) {
43         return format(date, DATE_PATTERN);
44     }
45
46     /**
47      * 日期格式化 日期格式为:yyyy-MM-dd
48      * @param date  日期
49      * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
50      * @return  返回yyyy-MM-dd格式日期
51      */
52     public static String format(Date date, String pattern) {
53         if(date != null){
54             SimpleDateFormat df = new SimpleDateFormat(pattern);
55             return df.format(date);
56         }
57         return null;
58     }
59
60     /**
61      * 日期解析
62      * @param date  日期
63      * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
64      * @return  返回Date
65      */
66     public static Date parse(String date, String pattern) {
67         try {
68             return new SimpleDateFormat(pattern).parse(date);
69         } catch (ParseException e) {
70             e.printStackTrace();
71         }
72         return null;
73     }
74
75     /**
76      * 字符串转换成日期
77      * @param strDate 日期字符串
78      * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
79      */
80     public static Date stringToDate(String strDate, String pattern) {
81         if (StringUtils.isBlank(strDate)){
82             return null;
83         }
84
85         DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
86         return fmt.parseLocalDateTime(strDate).toDate();
87     }
88
89     /**
90      * 根据周数,获取开始日期、结束日期
91      * @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周
92      * @return  返回date[0]开始日期、date[1]结束日期
93      */
94     public static Date[] getWeekStartAndEnd(int week) {
95         DateTime dateTime = new DateTime();
96         LocalDate date = new LocalDate(dateTime.plusWeeks(week));
97
98         date = date.dayOfWeek().withMinimumValue();
99         Date beginDate = date.toDate();
100         Date endDate = date.plusDays(6).toDate();
101         return new Date[]{beginDate, endDate};
102     }
103
104     /**
105      * 对日期的【秒】进行加/减
106      *
107      * @param date 日期
108      * @param seconds 秒数,负数为减
109      * @return 加/减几秒后的日期
110      */
111     public static Date addDateSeconds(Date date, int seconds) {
112         DateTime dateTime = new DateTime(date);
113         return dateTime.plusSeconds(seconds).toDate();
114     }
115
116     /**
117      * 对日期的【分钟】进行加/减
118      *
119      * @param date 日期
120      * @param minutes 分钟数,负数为减
121      * @return 加/减几分钟后的日期
122      */
123     public static Date addDateMinutes(Date date, int minutes) {
124         DateTime dateTime = new DateTime(date);
125         return dateTime.plusMinutes(minutes).toDate();
126     }
127
128     /**
129      * 对日期的【小时】进行加/减
130      *
131      * @param date 日期
132      * @param hours 小时数,负数为减
133      * @return 加/减几小时后的日期
134      */
135     public static Date addDateHours(Date date, int hours) {
136         DateTime dateTime = new DateTime(date);
137         return dateTime.plusHours(hours).toDate();
138     }
139
140     /**
141      * 对日期的【天】进行加/减
142      *
143      * @param date 日期
144      * @param days 天数,负数为减
145      * @return 加/减几天后的日期
146      */
147     public static Date addDateDays(Date date, int days) {
148         DateTime dateTime = new DateTime(date);
149         return dateTime.plusDays(days).toDate();
150     }
151
152     /**
153      * 对日期的【周】进行加/减
154      *
155      * @param date 日期
156      * @param weeks 周数,负数为减
157      * @return 加/减几周后的日期
158      */
159     public static Date addDateWeeks(Date date, int weeks) {
160         DateTime dateTime = new DateTime(date);
161         return dateTime.plusWeeks(weeks).toDate();
162     }
163
164     /**
165      * 对日期的【月】进行加/减
166      *
167      * @param date 日期
168      * @param months 月数,负数为减
169      * @return 加/减几月后的日期
170      */
171     public static Date addDateMonths(Date date, int months) {
172         DateTime dateTime = new DateTime(date);
173         return dateTime.plusMonths(months).toDate();
174     }
175
176     /**
177      * 对日期的【年】进行加/减
178      *
179      * @param date 日期
180      * @param years 年数,负数为减
181      * @return 加/减几年后的日期
182      */
183     public static Date addDateYears(Date date, int years) {
184         DateTime dateTime = new DateTime(date);
185         return dateTime.plusYears(years).toDate();
186     }
187
188     public static List<String> getTimeScale(Date startDate, Date endDate, int seconds) {
189         List<String> days = new ArrayList<String>();
190         Calendar calendar = Calendar.getInstance();
191         calendar.setTime(startDate);
192         while (calendar.getTime().compareTo(endDate) <= 0) {
193             days.add(DateUtils.format(calendar.getTime(), DATE_TIME_PATTERN));
194             calendar.add(Calendar.SECOND, seconds);
195         }
196         return days;
197     }
198 }