package com.dsh.account.util;
|
|
import java.text.ParseException;
|
import java.time.DayOfWeek;
|
import java.time.Duration;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
|
/**
|
* 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();
|
}
|
|
public static String getWeekOfDays(int desiredDayOfWeek) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
|
// 获取当前周的第一天(默认以星期一为一周的开始)
|
LocalDate firstDayOfWeek = currentDate.with(DayOfWeek.MONDAY);
|
|
LocalDate desiredDate = firstDayOfWeek.plusDays(desiredDayOfWeek - 1);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.dd");
|
return desiredDate.format(formatter);
|
}
|
//
|
// public static void main(String[] args) {
|
// String weekOfDays = LocalDateTimeUtils.getWeekOfDays(4);
|
// System.out.println(weekOfDays);
|
// }
|
}
|