houzhongjian
2024-10-30 a28ca3f36d0ace05966a8c0fac1e4b5fe921f882
提交 | 用户 | 时间
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";
34
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, DATE_PATTERN);
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     }
72
73     /**
74      * 字符串转换成日期
75      * @param strDate 日期字符串
76      * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
77      */
78     public static Date stringToDate(String strDate, String pattern) {
79         if (StringUtils.isBlank(strDate)){
80             return null;
81         }
82
83         DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
84         return fmt.parseLocalDateTime(strDate).toDate();
85     }
86
87     /**
88      * 根据周数,获取开始日期、结束日期
89      * @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周
90      * @return  返回date[0]开始日期、date[1]结束日期
91      */
92     public static Date[] getWeekStartAndEnd(int week) {
93         DateTime dateTime = new DateTime();
94         LocalDate date = new LocalDate(dateTime.plusWeeks(week));
95
96         date = date.dayOfWeek().withMinimumValue();
97         Date beginDate = date.toDate();
98         Date endDate = date.plusDays(6).toDate();
99         return new Date[]{beginDate, endDate};
100     }
101
102     /**
103      * 对日期的【秒】进行加/减
104      *
105      * @param date 日期
106      * @param seconds 秒数,负数为减
107      * @return 加/减几秒后的日期
108      */
109     public static Date addDateSeconds(Date date, int seconds) {
110         DateTime dateTime = new DateTime(date);
111         return dateTime.plusSeconds(seconds).toDate();
112     }
113
114     /**
115      * 对日期的【分钟】进行加/减
116      *
117      * @param date 日期
118      * @param minutes 分钟数,负数为减
119      * @return 加/减几分钟后的日期
120      */
121     public static Date addDateMinutes(Date date, int minutes) {
122         DateTime dateTime = new DateTime(date);
123         return dateTime.plusMinutes(minutes).toDate();
124     }
125
126     /**
127      * 对日期的【小时】进行加/减
128      *
129      * @param date 日期
130      * @param hours 小时数,负数为减
131      * @return 加/减几小时后的日期
132      */
133     public static Date addDateHours(Date date, int hours) {
134         DateTime dateTime = new DateTime(date);
135         return dateTime.plusHours(hours).toDate();
136     }
137
138     /**
139      * 对日期的【天】进行加/减
140      *
141      * @param date 日期
142      * @param days 天数,负数为减
143      * @return 加/减几天后的日期
144      */
145     public static Date addDateDays(Date date, int days) {
146         DateTime dateTime = new DateTime(date);
147         return dateTime.plusDays(days).toDate();
148     }
149
150     /**
151      * 对日期的【周】进行加/减
152      *
153      * @param date 日期
154      * @param weeks 周数,负数为减
155      * @return 加/减几周后的日期
156      */
157     public static Date addDateWeeks(Date date, int weeks) {
158         DateTime dateTime = new DateTime(date);
159         return dateTime.plusWeeks(weeks).toDate();
160     }
161
162     /**
163      * 对日期的【月】进行加/减
164      *
165      * @param date 日期
166      * @param months 月数,负数为减
167      * @return 加/减几月后的日期
168      */
169     public static Date addDateMonths(Date date, int months) {
170         DateTime dateTime = new DateTime(date);
171         return dateTime.plusMonths(months).toDate();
172     }
173
174     /**
175      * 对日期的【年】进行加/减
176      *
177      * @param date 日期
178      * @param years 年数,负数为减
179      * @return 加/减几年后的日期
180      */
181     public static Date addDateYears(Date date, int years) {
182         DateTime dateTime = new DateTime(date);
183         return dateTime.plusYears(years).toDate();
184     }
185
186     public static List<String> getTimeScale(Date startDate, Date endDate, int seconds) {
187         List<String> days = new ArrayList<String>();
188         Calendar calendar = Calendar.getInstance();
189         calendar.setTime(startDate);
190         while (calendar.getTime().compareTo(endDate) <= 0) {
191             days.add(DateUtils.format(calendar.getTime(), DATE_TIME_PATTERN));
192             calendar.add(Calendar.SECOND, seconds);
193         }
194         return days;
195     }
196 }