中扬CRM客户关系管理系统
LSH
2024-03-27 92459e3e326488acae77e068c37eb4b96eae5ebf
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
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
package com.zy.crm.manager.utils;
 
import javax.xml.crypto.Data;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;
 
public class TimeCalculatorUtils {
 
    //获取当前时间的小时数(24小时制):
    public static int nowTimeHour(){
        // 获取当前时间戳
        long timestamp = System.currentTimeMillis();
 
        // 创建Date对象,并设置时间戳
        Date date = new Date(timestamp);
 
        // 创建TimeZone对象,设置为中国北京时间
        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
 
        // 创建Calendar对象,并设置时区
        // 注意:Calendar类中的月份是从0开始的,所以需要减去1
        java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone);
        calendar.setTime(date);
 
        // 获取当前小时数(24小时制)
        return calendar.get(java.util.Calendar.HOUR_OF_DAY);
    }
 
    //获取当天小时数(24小时制)中国北京时间:
    public static int timeTimeHour(Date date){
        // 创建TimeZone对象,设置为中国北京时间
        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
 
        // 创建Calendar对象,并设置时区
        // 注意:Calendar类中的月份是从0开始的,所以需要减去1
        java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone);
        calendar.setTime(date);
 
        // 获取当前小时数(24小时制)
        return calendar.get(java.util.Calendar.HOUR_OF_DAY);
    }
 
    //获取前一天的日期(日期天数减一)
    public static Date timeYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        return calendar.getTime();
    }
 
    //获取七天前的日期(日期天数减七)
    public static Date timeFrontSevenYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -7);
        return calendar.getTime();
    }
 
    //获取七天后的日期(日期天数加七)
    public static Date timeAfterSevenYesterday(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, 7);
        return calendar.getTime();
    }
 
    //获取相差n天的日期(日期天数加N)
    public static Date timeYesterdayN(Date date,int day){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
 
    //获取年月日
    public static String timeYestMonthDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
 
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;  // 月份从0开始,需要加1
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return year+"年"+month+"月"+day+"日";
    }
 
    //获取年
    public static int timeYest(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
 
        return calendar.get(Calendar.YEAR);
    }
 
    //获取月
    public static int timeMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
 
        return calendar.get(Calendar.MONTH) + 1;
    }
 
    //获取日
    public static int timeDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
 
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    //获取年差异
    public static int DifferenceYest(Date startDay,Date endDay){
        int startYest = timeYest(startDay);
        int endYest = timeYest(endDay);
        return endYest-startYest;
    }
    //获取月差异
    public static int DifferenceMonth(Date startDay,Date endDay){
        int startMonth = timeMonth(startDay);
        int endMonth = timeMonth(endDay);
        return endMonth-startMonth;
    }
    //获取天差异
    public static int DifferenceDayInt(Date startDay,Date endDay){
        return DifferenceDayLong(startDay,endDay).intValue();
    }
    //获取天差异
    public static Long DifferenceDayLong(Date startDay,Date endDay){
 
        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
 
        return ChronoUnit.DAYS.between(a, b)+1;
    }
    //获取天差异
    public static Double DifferenceDayMorningAfternoon(Date startDay,Date endDay,int startTime,int endTime){
        double between = DifferenceDayLong(startDay, endDay).doubleValue();
        if (startTime==2){
            between = between-0.5;
        }
        if (endTime == 1){
            between = between-0.5;
        }
        return between;
    }
 
    public static boolean CompareData(Date startDay,Date endDay){
 
        // 将日期字符串解析为LocalDate对象
        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
 
        // 比较日期
        if (a.isAfter(b)) {
            return false;
        } else if (a.isBefore(b)) {
            return true;
        } else {
            return true;
        }
    }
 
    //java.time.LocalDate 转换为 java.util.Date;
    public static Date DateLocalDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
 
    //获取现在日期是当月第几周
    public static int WeeklyNowMonthDay(Date date) {
//        int day = timeDay(date);
//        if (day<7){
//            if (WeeklyNowMonth(WeeklyMonday(date))>2){
//                return 1;
//            }
//        }
        return WeeklyNowMonth(WeeklyMonday(date));
    }
    public static int WeeklyNowMonth(Date date) {
//        LocalDate currentDate = LocalDate.now();
        LocalDate currentDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
 
        WeekFields weekFields = WeekFields.of(Locale.getDefault());
 
        int weekOfMonth = currentDate.get(weekFields.weekOfMonth());
 
 
        return weekOfMonth;
    }
 
    //限制两个日期是周一和周末  工作日  周一到周六
    public static void WeeklySix(Date date) {
//        LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一
        LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        System.out.println("当前日期 " + startDate + " 周");
 
        LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天
        System.out.println("当前日期加上6天是 " + endDate + " 周");
 
 
        // 如果开始日期不是周一,则将它调整到下一个周一
        if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        }
 
        // 如果结束日期不是周末(即周六或周日),则将它调整到下一个周末
        if (endDate.getDayOfWeek() != DayOfWeek.SATURDAY && endDate.getDayOfWeek() != DayOfWeek.SUNDAY) {
            endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        }
 
        // 确保两个日期之间相隔七天
        while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) {
            startDate = startDate.plus(7, ChronoUnit.DAYS);
        }
 
        System.out.println("开始日期:" + startDate);
        System.out.println("结束日期:" + endDate);
    }
 
    //限制两个日期是周一和周末  周一到周日
    public static List<Date> WeeklySeven(Date date) {
//        LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一
        LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
//        System.out.println("当前日期 " + startDate + " 周");
 
        LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天
//        System.out.println("当前日期加上6天是 " + endDate + " 周");
 
        // 如果开始日期不是周一,则将它调整到下一个周一
        if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        }
 
        // 如果结束日期不是周日,则将它调整到下一个周日
        if (endDate.getDayOfWeek() != DayOfWeek.SUNDAY) {
            endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        }
 
        // 确保两个日期之间相隔七天
        while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) {
            startDate = startDate.plus(7, ChronoUnit.DAYS);
        }
 
        List<Date> dateList = new ArrayList<>();
        dateList.add(DateLocalDate(startDate));
        dateList.add(DateLocalDate(endDate));
        return dateList;
//        System.out.println("开始日期:" + startDate);
//        System.out.println("结束日期:" + endDate);
    }
 
    //判断是不是周一
    public static boolean WeeklyOneSign(Date date) {
        LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        // 判断是不是周一
        if (localDate.getDayOfWeek() != DayOfWeek.MONDAY) {
            return false;
        }
        return true;
    }
 
    //获取本周周一
    public static Date WeeklyMonday (Date date) {
        LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date));
        // 下周周一
        localDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
 
        // 将LocalDate转换为Date
        Date monday = DateLocalDate(localDate);
 
        // 则将它调整到本周周一
        return timeFrontSevenYesterday(monday);
    }
 
    //获取当前日期所在的周一及周日时间
    public static List<Date> WeeklyMondayAndSundayNow(Date date) {
        Date nowMonday = WeeklyMonday(date);
        return WeeklySeven(nowMonday);
    }
 
    //获取当前日期上一周周一及周日时间
    public static List<Date> WeeklyMondayAndSundayFront(Date date) {
        Date nowMonday = WeeklyMonday(date);
        Date frontSevenYesterday = timeFrontSevenYesterday(nowMonday);
        return WeeklySeven(frontSevenYesterday);
    }
 
    //获取当前日期下一周周一及周日时间
    public static List<Date> WeeklyMondayAndSundayAfter(Date date) {
        Date nowMonday = WeeklyMonday(date);
        Date afterSevenYesterday = timeAfterSevenYesterday(nowMonday);
        return WeeklySeven(afterSevenYesterday);
    }
 
    //获取周一到周末
    public static List<Date> WeeklyDays(Date date){
        Date nowMonday = WeeklyMonday(date);
        List<Date> dateList = new ArrayList<>();
        dateList.add(nowMonday);
        for (int i = 1; i<7 ; i++){
            dateList.add(timeYesterdayN(nowMonday,i));
        }
        return dateList;
    }
 
    //获取周一到周末
    public static List<Date> WeeklyListDays(List<Date> dates){
        Date date = dates.get(0);
        Date nowMonday = WeeklyMonday(date);
        List<Date> dateList = new ArrayList<>();
        dateList.add(nowMonday);
        for (int i = 1; i<7 ; i++){
            dateList.add(timeYesterdayN(nowMonday,i));
        }
        return dateList;
    }
 
    public static void main(String[] args) {
        Date now = new Date();
        int weeklyNowMonth = WeeklyNowMonthDay(now);
        System.out.println("当前日期是第 " + weeklyNowMonth + " 周");
 
        LocalDate startDate1 = LocalDate.of(2024, 2, 29);
        int weeklyNowMonth1 = WeeklyNowMonthDay(DateLocalDate(startDate1));
        System.out.println("当前日期是第 " + weeklyNowMonth1 + " 周");
 
        LocalDate startDate2 = LocalDate.of(2024, 3, 5);
        int weeklyNowMonth2 = WeeklyNowMonthDay(DateLocalDate(startDate2));
        System.out.println("当前日期是第 " + weeklyNowMonth2 + " 周");
 
        LocalDate startDate3 = LocalDate.of(2024, 3, 10);
        int weeklyNowMonth3 = WeeklyNowMonthDay(DateLocalDate(startDate3));
        System.out.println("当前日期是第 " + weeklyNowMonth3 + " 周");
 
        LocalDate startDate4 = LocalDate.of(2024, 3, 31);
        int weeklyNowMonth4 = WeeklyNowMonthDay(DateLocalDate(startDate4));
        System.out.println("当前日期是第 " + weeklyNowMonth4 + " 周");
 
        LocalDate startDate5 = LocalDate.of(2024, 4, 1);
        int weeklyNowMonth5 = WeeklyNowMonthDay(DateLocalDate(startDate5));
        System.out.println("当前日期是第 " + weeklyNowMonth5 + " 周");
 
        LocalDate startDate6 = LocalDate.of(2024, 4, 7);
        int weeklyNowMonth6 = WeeklyNowMonthDay(DateLocalDate(startDate6));
        System.out.println("当前日期是第 " + weeklyNowMonth6 + " 周");
    }
 
//    public static void main(String[] args) {
//        Date now = new Date();
//        //本周
//        List<Date> dateList = WeeklyMondayAndSundayNow(now);
//        for (Date date : dateList){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //上周
//        List<Date> dateList1 = WeeklyMondayAndSundayFront(now);
//        for (Date date : dateList1){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //下周
//        List<Date> dateList2 = WeeklyMondayAndSundayAfter(now);
//        for (Date date : dateList2){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//        //周
//        List<Date> dateList3 = WeeklyDays(now);
//        for (Date date : dateList3){
//            System.out.println("------------------------------");
//            System.out.println(date);
//        }
//    }
 
}