龚焕茏
2024-03-11 2bacd2670e0f1b495e9cfda6023d8bccc32a5572
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
package org.dromara.demo.util;
 
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import org.springframework.util.StringUtils;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
 
public class PeriodDate {
    public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
 
    //今天
    public String today = DateUtil.today();
    public DateTime date = DateUtil.date();
    //本月
    public String month = DateUtil.format(date, "M");
    //本周的第一天
    public String weekFirst = PeriodDate.getThisWeekOfFirstDate();
    //本周的最后一天
    public String weekEnd = DateUtil.format(DateUtil.offsetDay(date, 4), "yyyy-MM-dd");
    //本月的第一天
    public String MonthFirst = PeriodDate.getThisMonthOfFirstDate(0);
    //本月的最后一天
    public String MonthEnd = PeriodDate.getThisMouthLastDay();
    //本季度的最后一天
    public String lastdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[1];
    //本季度的第一天
    public String firstdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[0];
    //本月天数
    public int daysInMonth = PeriodDate.getDaysOfMonth();
 
    public static String changeSqlNotNull(String sql) {
        String[] strings = sql.split(",");
        String returnSql = "";
        for (String str : strings) {
            if (str.contains("''")) {
                returnSql = returnSql + str + ",";
            } else {
                returnSql = returnSql + "ifnull(" + str + ",'') " + str + ",";
 
            }
        }
        return returnSql.substring(0, returnSql.length() - 1);
    }
 
 
    /**
     * 获取两个日期之间的所有日期(字符串格式, 按天计算)
     *
     * @param startTime String 开始时间 yyyy-MM-dd
     * @param endTime   String 结束时间 yyyy-MM-dd
     * @return
     */
    public static List<String> getBetweenDays(String startTime, String endTime) throws ParseException {
        if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
            return null;
        }
        //1、定义转换格式
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
 
        Date start = df.parse(startTime);
        Date end = df.parse(endTime);
        if (StringUtils.isEmpty(start) || StringUtils.isEmpty(end)) {
            return null;
        }
        List<String> result = new ArrayList<String>();
 
        Calendar tempStart = Calendar.getInstance();
        tempStart.setTime(start);
 
        tempStart.add(Calendar.DAY_OF_YEAR, 1);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar tempEnd = Calendar.getInstance();
        tempEnd.setTime(end);
        result.add(sdf.format(start));
        while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
            result.add(sdf.format(tempStart.getTime()));
            tempStart.add(Calendar.DAY_OF_YEAR, 1);
        }
        return result;
    }
 
    /**
     * 本周的第一天
     *
     * @return
     */
    public static String getThisWeekOfFirstDate() {
        SimpleDateFormat format = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return format.format(calendar.getTime());
    }
 
 
    /**
     * @param i 为0表示本月,为1表示下月,为-1表示上月
     * @return
     * @throws
     * @Title: DateUtil
     * @Description: 获取本月当前时间(或者上月下月)
     * @author lin
     * @since 2019年12月5日下午4:02:44
     */
    public static String getTime1(Integer i) {
        Calendar calendar = Calendar.getInstance();
        if (i != null) {
            calendar.add(Calendar.MONTH, i);
        }
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DATE);
        return year + "-" + (month + 1) + "-" + day;
    }
 
    /**
     * @param //i为0表示本月为1表示下月
     * @return
     * @throws
     * @Title: DateUtil
     * @Description: 获取本月第一天(获取本月的第一天)
     * @author lin
     * @since 2019年12月5日下午3:59:55
     */
    public static String getThisMonthOfFirstDate(Integer i) {
        SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
        Calendar calendar = Calendar.getInstance();
        if (i != null) {
            calendar.add(Calendar.MONTH, i);
        }
        calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
        return format.format(calendar.getTime());
    }
 
    /**
     * 获取本月最后一天
     *
     * @return
     */
    public static String getThisMouthLastDay() {
        //设置时间格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //获得实体类
        Calendar ca = Calendar.getInstance();
        //设置最后一天
        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
        //最后一天格式化
        String lastDay = format.format(ca.getTime());
        return lastDay;
    }
 
    /**
     * 某一个月第一天和最后一天
     *
     * @param date               指定日期
     * @param pattern            日期格式
     * @param //isNeedHms是否需要时分秒
     * @return
     */
    public static Map<String, Object> getFirstLastDayByMonth(Date date,
                                                             String pattern, boolean isNeedHms) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        Calendar calendar = Calendar.getInstance();
 
        calendar.setTime(date);
        Date theDate = calendar.getTime();
 
        // 第一天
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);
        if (isNeedHms) {
            str.append(" 00:00:00");
        }
        day_first = str.toString();
 
        // 最后一天
        calendar.add(Calendar.MONTH, 1); // 加一个月
        calendar.set(Calendar.DATE, 1); // 设置为该月第一天
        calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
        String day_last = df.format(calendar.getTime());
        StringBuffer endStr = new StringBuffer().append(day_last);
        if (isNeedHms) {
            endStr.append(" 23:59:59");
        }
        day_last = endStr.toString();
 
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("first", day_first);
        map.put("last", day_last);
        return map;
    }
 
 
    /**
     * 获取当前季度
     */
    public static String getQuarter() {
        Calendar c = Calendar.getInstance();
        int month = c.get(Calendar.MONTH) + 1;
        int quarter = 0;
        if (month >= 1 && month <= 3) {
            quarter = 1;
        } else if (month >= 4 && month <= 6) {
            quarter = 2;
        } else if (month >= 7 && month <= 9) {
            quarter = 3;
        } else {
            quarter = 4;
        }
        return quarter + "";
    }
 
    /**
     * 获取某季度的第一天和最后一天
     *
     * @param //num第几季度
     */
    public static String[] getCurrQuarter(int num) {
        String[] s = new String[2];
        String str = "";
        // 设置本年的季
        Calendar quarterCalendar = null;
        switch (num) {
            case 1: // 本年到现在经过了一个季度,在加上前4个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 3);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "01-01";
                s[1] = str;
                break;
            case 2: // 本年到现在经过了二个季度,在加上前三个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 6);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "04-01";
                s[1] = str;
                break;
            case 3:// 本年到现在经过了三个季度,在加上前二个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 9);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "07-01";
                s[1] = str;
                break;
            case 4:// 本年到现在经过了四个季度,在加上前一个季度
                quarterCalendar = Calendar.getInstance();
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "10-01";
                s[1] = str.substring(0, str.length() - 5) + "12-31";
                break;
        }
        return s;
    }
 
    /**
     * 用途:以指定的格式格式化日期字符串
     *
     * @param pattern     字符串的格式
     * @param currentDate 被格式化日期
     * @return String 已格式化的日期字符串
     * @throws NullPointerException 如果参数为空
     */
    public static String formatDate(Date currentDate, String pattern) {
        if (currentDate == null || "".equals(pattern) || pattern == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(currentDate);
    }
 
    /**
     * @return java.util.List<java.lang.String>
     * @Author Lin
     * @Description
     * @Date 2021/3/10 14:17
     * @Param []
     **/
    public static List<String> getStartDateToEndDate(String startDate, String endDate) {
        List<String> betweenDays = null;
        try {
            betweenDays = PeriodDate.getBetweenDays(startDate, endDate);
            System.out.println(betweenDays);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return betweenDays;
    }
 
    /**
     * @return int
     * @Author Lin
     * @Description 本月天数
     * @Date 2021/3/10 14:48
     * @Param [date]
     **/
    public static int getDaysOfMonth() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
 
 
}