package com.zy.asrs.utils;
|
|
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
|
Calendar calendar = Calendar.getInstance(timeZone);
|
calendar.setTime(date);
|
|
// 获取当前小时数(24小时制)
|
return calendar.get(Calendar.HOUR_OF_DAY);
|
}
|
|
//获取当天小时数(24小时制)中国北京时间:
|
public static int timeTimeHour(Date date){
|
// 创建TimeZone对象,设置为中国北京时间
|
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
|
|
// 创建Calendar对象,并设置时区
|
// 注意:Calendar类中的月份是从0开始的,所以需要减去1
|
Calendar calendar = Calendar.getInstance(timeZone);
|
calendar.setTime(date);
|
|
// 获取当前小时数(24小时制)
|
return calendar.get(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 Long differenceInMilliseconds(Date startDay, Date endDay) {
|
if (startDay == null || endDay == null) {
|
throw new IllegalArgumentException("Dates cannot be null");
|
}
|
|
// 获取毫秒差异
|
return endDay.getTime() - startDay.getTime();
|
}
|
|
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);
|
// }
|
// }
|
|
}
|