44323
2023-11-27 aa925d851857f50eff0556411366690d9a78a0e5
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
package com.dsh.course.util;
 
import java.text.ParseException;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
 
/**
 * LocalDateTimeUtils
 * LocalDateTime 时间工具
 *
 * @author yudeshan
 * @version V1.0
 */
public class LocalDateTimeUtils {
    private final static int[] dayArr = new int[]{20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
    private final static String[] constellationArr = new String[]{"摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"};
 
 
    /**
     * 取两个时间相差毫秒数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return
     */
    public static long betweenMillis(LocalDateTime start, LocalDateTime end) {
        Duration duration = Duration.between(start, end);
        return duration.toMillis();
    }
 
    /**
     * 通过生日计算年龄
     *
     * @param birthDay 生日
     * @return
     * @throws ParseException
     */
    public static int getAgeByBirth(LocalDate birthDay) throws ParseException {
        int age = 0;
        //出生日期晚于当前时间,无法计算
        LocalDate now = LocalDate.now();
        if (birthDay.isAfter(now)) {
            throw new IllegalArgumentException("生日大于当前时间!");
        }
        //当前年份
        int yearNow = now.getYear();
        //当前月份
        int monthNow = now.getMonthValue();
        //当前日期
        int dayOfMonthNow = now.getDayOfMonth();
 
        int yearBirth = birthDay.getYear();
        int monthBirth = birthDay.getMonthValue();
        int dayOfMonthBirth = birthDay.getDayOfMonth();
        //计算整岁数
        age = yearNow - yearBirth;
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth) {
                    //当前日期在生日之前,年龄减一
                    age--;
                }
            } else {
                //当前月份在生日之前,年龄减一
                age--;
            }
        }
        return age;
    }
 
    /**
     * 根据月份计算星座
     */
 
    public static String getConstellation(LocalDate date) {
        Integer month = date.getMonthValue();
        Integer day = date.getDayOfMonth();
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }
 
    /**
     * 获取当天的星期几
     *
     * @return
     */
    public static int getWeekStr() {
        LocalDate today = LocalDate.now();
        DayOfWeek dayOfWeek = today.getDayOfWeek();
        return dayOfWeek.getValue();
    }
 
    /**
     * 根据输入本周的周几,获取当天的时间
     *
     * @param dayOfWeekInput 周几
     * @return
     */
    public static Date getDateOfWeekNum(int dayOfWeekInput) {
        // 获取当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
 
        // 设置为本周的第一天(星期一)
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
 
        // 根据输入的星期几数值,计算出相应的偏移量
        int dayOfWeekIndex = (dayOfWeekInput + 6) % 7;
        calendar.add(Calendar.DAY_OF_WEEK, dayOfWeekIndex);
 
        // 获取计算后的日期
        return calendar.getTime();
    }
 
 
}