当前位置: 首页 > news >正文

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 #

目录

简介

Date工具类单元测试

Date工具类


简介

        本文章是个人总结实际工作中常用到的Date工具类,主要包含Java-jdk8以下版本的Date相关使用方法,可以方便的在工作中灵活的应用,在个人工作期间频繁使用这些时间的格式转换以及时间的运算(加、减),时间的比较,时间的范围获取等等,在这里把时间相关的具体方法展现出来供大家使用参考,方便大家在工作中更加提升效率!

Date工具类方法

  • Date转String方法

    • Date转 格式:DATE_YYYY_PATTERN = "yyyy";
    • Date转 格式:DATE_YYYY_PATTERN2 = "yyyy年";
    • Date转 格式:DATE_MM_PATTERN = "MM";
    • Date转 格式:DATE_MM_PATTERN2 = "MM月";
    • Date转 格式:DATE_DD_PATTERN = "dd";
    • Date转 格式:DATE_DD_PATTERN2 = "dd日";
    • Date转 格式:DATE_YYYY_MM_PATTERN = "yyyy-MM";
    • Date转 格式:DATE_YYYY_MM_PATTERN2 = "yyyy/MM";
    • Date转 格式:DATE_YYYY_MM_PATTERN3 = "yyyyMM";
    • Date转 格式:DATE_YYYY_MM_PATTERN4 = "yyyy.MM";
    • Date转 格式: DATE_YYYY_MM_PATTERN5 = "yyyy年MM";
    • Date转 格式: DATE_MM_DD_PATTERN = "MM-dd";
    • Date转 格式: DATE_MM_DD_PATTERN2 = "MM/dd";
    • Date转 格式: DATE_MM_DD_PATTERN3 = "MMdd";
    • Date转 格式: DATE_MM_DD_PATTERN4 = "MM.dd";
    • Date转 格式: DATE_MM_DD_PATTERN5 = "MM年dd";
    • Date转 格式: DATE_PATTERN = "yyyy-MM-dd";
    • Date转 格式: DATE_PATTERN2 = "yyyy/MM/dd";
    • Date转 格式: DATE_PATTERN3 = "yyyyMMdd";
    • Date转 格式: DATE_PATTERN4 = "yyyy.MM.dd";
    • Date转 格式: DATE_PATTERN5 = "yyyy年MM月dd日";
  • String类型日期转Date方法

    • String类型日期转Date方法
    • String类型日期转Date方法+自定义规则
  • DateTime转String方法

    • Date转 格式: TIME_HH_PATTERN = "HH";
    • Date转 格式: TIME_hh_PATTERN = "hh";
    • Date转 格式:TIME_HH_PATTERN2 = "HH小时";
    • Date转 格式: TIME_hh_PATTERN2 = "hh小时";  (12小时制)
    • Date转 格式:TIME_MM_PATTERN = "mm";
    • Date转 格式:TIME_MM_PATTERN2 = "mm分钟";
    • Date转 格式:TIME_SS_PATTERN = "ss";
    • Date转 格式:TIME_SS_PATTERN2 = "ss秒";
    • Date转 格式:TIME_HH_MM_PATTERN = "HH:mm";
    • Date转 格式:TIME_hh_MM_PATTERN = "hh:mm";
    • Date转 格式:TIME_MM_SS_PATTERN = "mm:ss";
    • Date转 格式:TIME_HH_MM_SS_PATTERN = "HH:mm:ss"; (24小时制)
    • Date转 格式:TIME_hh_MM_SS_PATTERN = "hh:mm:ss";
    • Date转 格式:DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    • Date转 格式:DATE_TIME_PATTERN2 = "yyyyMMddHHmmss";
    • Date转 格式:DATE_TIME_PATTERN3 = "yyyy/MM/dd HH:mm:ss";
    • Date转 格式:DATE_TIME_PATTERN4 = "yyyy.MM.dd HH:mm:ss";
    • Date转 格式:DATE_TIME_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss";
    • Date转 格式:DATE_TIME_PATTERN6 = "yyyy年MM月dd日 HH时mm分ss秒";
    • Date转 格式:DATE_TIME_PATTERN7 = "yyyy年MM月dd日 HH小时mm分钟ss秒";
    • Date转 格式:DATE_TIME_PATTERN8 = "yyyy年MM月dd日HH小时mm分钟ss秒";
    • Date转 格式:DATE_TIME_h_PATTERN = "yyyy-MM-dd hh:mm:ss";
    • Date转 格式:DATE_TIME_h_PATTERN2 = "yyyyMMddhhmmss";
    • Date转 格式:DATE_TIME_h_PATTERN3 = "yyyy/MM/dd hh:mm:ss";
    • Date转 格式:DATE_TIME_h_PATTERN4 = "yyyy.MM.dd hh:mm:ss";
    • Date转 格式:DATE_TIME_h_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss";
    • Date转 格式:DATE_TIME_h_PATTERN6 = "yyyy年MM月dd日 hh时mm分ss秒";
    • Date转 格式:DATE_TIME_h_PATTERN7 = "yyyy年MM月dd日 hh小时mm分钟ss秒";
    • Date转 格式:DATE_TIME_PATTERN8 = "yyyy年MM月dd日HH小时mm分钟ss秒";
    • Date转 格式:DATE_TIME_SSS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
    • Date转 格式:DATE_TIME_SSS_PATTERN2 = "yyyyMMddHHmmssSSS";
    • Date转 格式:DATE_TIME_SSS_PATTERN3 = "yyyy/MM/dd HH:mm:ss.SSS";
    • Date转 格式:DATE_TIME_SSS_PATTERN4 = "yyyy.MM.dd HH:mm:ss.SSS";
    • Date转 格式:DATE_TIME_SSS_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss.SSS";
    • Date转 格式:DATE_TIME_h_SSS_PATTERN = "yyyy-MM-dd hh:mm:ss.SSS";
    • Date转 格式:DATE_TIME_h_SSS_PATTERN2 = "yyyyMMddhhmmssSSS";
    • Date转 格式:DATE_TIME_h_SSS_PATTERN3 = "yyyy/MM/dd hh:mm:ss.SSS";
    • Date转 格式:DATE_TIME_h_SSS_PATTERN4 = "yyyy.MM.dd hh:mm:ss.SSS";
    • Date转 格式:DATE_TIME_h_SSS_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss.SSS";
    • Date转字符串公共格式化方法
  • Date获取时间戳方法

    • 获取当前时间的时间戳
    • 获取指定时间的时间戳
  • String类型日期获取时间戳方法

    • 获取指定时间的时间戳 yyyy-MM-dd
    • 获取指定时间的时间戳 yyyy-MM-dd hh:mm:ss
  • Date日期对【秒】【分钟】【小时】【天】【周】【月】【年】进行加(+)/减(-)方法

    • 对日期的【秒】进行加/减
    • 对日期的【分钟】进行加/减
    • 对日期的【小时】进行加/减
    • 对日期的【天】进行加/减
    • 对日期的【周】进行加/减
    • 对日期的【月】进行加/减
    • 对日期的【年】进行加/减
    • 获取日期时间对象
  • Date日期比较方法

    • 比较两个时间是否相等,只比较年
    • 比较两个时间是否相等,只比较年 (Java8+)
    • 比较两个时间是否相等,只比较年月
    • 比较两个时间是否相等,只比较年月 (Java8+)
    • 比较两个时间是否相等,只比较年月日
    • 比较两个时间是否相等,只比较年月日 (Java8+)
    • 比较两个时间是否相等,只比较年月日时分秒
    • 比较两个时间是否相等,只比较年月日时分秒 (Java8+)
    • 比较两个时间大小,只比较年
    • 比较两个时间大小,只比较年 (Java8+)
    • 比较两个时间大小,只比较年月
    • 比较两个时间大小,只比较年月 (Java8+)
    • 比较两个时间大小,只比较年月日
    • 比较两个时间大小,只比较年月日 (Java8+)
    • 比较两个时间大小,只比较年月日时分秒
    • 比较两个时间大小,只比较年月日时分秒 (Java8+)
    • 检查两个时间之间的差异是否大于等于30分钟
    • 检查两个时间之间的差异是否大于等于多少分钟
  • 检查两个时间之间的差异是否大于等于多少(自定义)分钟

    • 检查两个时间之间的差异是否大于等于30分钟
  • Date日期获取方法

    • 根据年份获取所有月份
    • 根据年份+月份获取月份的所有周
    • 根据年份+月份获取月份的所有天
    • 根据年份+月份获取月份的所有天
    • 根据年份+月份获取指定天的所有小时

Date工具类单元测试源码

单元测试代码:

public static void main(String[] args) {Date date = new Date();System.out.println("===========================****************Date转String方法****************===========================");System.out.println("formatDateYYYY(date) = " + formatDateYYYY(date));System.out.println("formatDateYYYY2(date) = " + formatDateYYYY2(date));System.out.println("formatDateMM(date) = " + formatDateMM(date));System.out.println("formatDateMM2(date) = " + formatDateMM2(date));System.out.println("formatDateDD(date) = " + formatDateDD(date));System.out.println("formatDateDD2(date) = " + formatDateDD2(date));System.out.println("formatDateYYYYMM(date) = " + formatDateYYYYMM(date));System.out.println("formatDateYYYYMM2(date) = " + formatDateYYYYMM2(date));System.out.println("formatDateYYYYMM3(date) = " + formatDateYYYYMM3(date));System.out.println("formatDateYYYYMM4(date) = " + formatDateYYYYMM4(date));System.out.println("formatDateYYYYMM5(date) = " + formatDateYYYYMM5(date));System.out.println("formatDateMMDD(date) = " + formatDateMMDD(date));System.out.println("formatDateMMDD2(date) = " + formatDateMMDD2(date));System.out.println("formatDateMMDD3(date) = " + formatDateMMDD3(date));System.out.println("formatDateMMDD4(date) = " + formatDateMMDD4(date));System.out.println("formatDateMMDD5(date) = " + formatDateMMDD5(date));System.out.println("formatDate(date) = " + formatDate(date));System.out.println("formatDate2(date) = " + formatDate2(date));System.out.println("formatDate3(date) = " + formatDate3(date));System.out.println("formatDate4(date) = " + formatDate4(date));System.out.println("formatDate5(date) = " + formatDate5(date));System.out.println("===========================****************DateTime转String方法****************===========================");System.out.println("formatTimeHH(date) = " + formatTimeHH(date));System.out.println("formatTimeHh(date) = " + formatTimeHh(date));System.out.println("formatTimeHH2(date) = " + formatTimeHH2(date));System.out.println("formatTimeHh2(date) = " + formatTimeHh2(date));System.out.println("formatTimeMM(date) = " + formatTimeMM(date));System.out.println("formatTimeMM2(date) = " + formatTimeMM2(date));System.out.println("formatTimeSS(date) = " + formatTimeSS(date));System.out.println("formatTimeSS2(date) = " + formatTimeSS2(date));System.out.println("formatTimeHHMM(date) = " + formatTimeHHMM(date));System.out.println("formatTimeHhMM(date) = " + formatTimeHhMM(date));System.out.println("formatTimeMMSS(date) = " + formatTimeMMSS(date));System.out.println("formatTimeHHMMSS(date) = " + formatTimeHHMMSS(date));System.out.println("formatTimeHhMMSS(date) = " + formatTimeHhMMSS(date));System.out.println("formatDateTime(date) = " + formatDateTime(date));System.out.println("formatDateTime2(date) = " + formatDateTime2(date));System.out.println("formatDateTime3(date) = " + formatDateTime3(date));System.out.println("formatDateTime4(date) = " + formatDateTime4(date));System.out.println("formatDateTime5(date) = " + formatDateTime5(date));System.out.println("formatDateTime6(date) = " + formatDateTime6(date));System.out.println("formatDateTime7(date) = " + formatDateTime7(date));System.out.println("formatDateTime8(date) = " + formatDateTime8(date));System.out.println("formatDateTimeH(date) = " + formatDateTimeH(date));System.out.println("formatDateTimeH2(date) = " + formatDateTimeH2(date));System.out.println("formatDateTimeH3(date) = " + formatDateTimeH3(date));System.out.println("formatDateTimeH4(date) = " + formatDateTimeH4(date));System.out.println("formatDateTimeH5(date) = " + formatDateTimeH5(date));System.out.println("formatDateTimeH6(date) = " + formatDateTimeH6(date));System.out.println("formatDateTimeH7(date) = " + formatDateTimeH7(date));System.out.println("formatDateTimeH8(date) = " + formatDateTimeH8(date));System.out.println("formatDateTimeSSS(date) = " + formatDateTimeSSS(date));System.out.println("formatDateTimeSSS2(date) = " + formatDateTimeSSS2(date));System.out.println("formatDateTimeSSS3(date) = " + formatDateTimeSSS3(date));System.out.println("formatDateTimeSSS4(date) = " + formatDateTimeSSS4(date));System.out.println("formatDateTimeSSS5(date) = " + formatDateTimeSSS5(date));System.out.println("formatDateTimeHSSS(date) = " + formatDateTimeHSSS(date));System.out.println("formatDateTimeHSSS2(date) = " + formatDateTimeHSSS2(date));System.out.println("formatDateTimeHSSS3(date) = " + formatDateTimeHSSS3(date));System.out.println("formatDateTimeHSSS4(date) = " + formatDateTimeHSSS4(date));System.out.println("formatDateTimeHSSS5(date) = " + formatDateTimeHSSS5(date));System.out.println("===========================****************Date获取时间戳方法****************===========================");System.out.println("getNowTimestamp() = " + getNowTimestamp());System.out.println("getDateTimestamp(date) = " + getDateTimestamp(date));System.out.println("===========================****************String类型日期获取时间戳方法****************===========================");System.out.println("getDateTimestampByYYYYMMDD(\"2024-09-09\") = " + getDateTimestampByYYYYMMDD("2024-09-09"));System.out.println("getDateTimestampByYYYYMMDDHHMMSS(\"2024-09-09 14:50:00\") = " + getDateTimestampByYYYYMMDDHHMMSS("2024-09-09 14:50:00"));System.out.println("=============******Date日期对【秒】【分钟】【小时】【天】【周】【月】【年】进行加(+)/减(-)方法*********==============");System.out.println("addDateSeconds(date, 0) = " + addDateSeconds(date, 0));System.out.println("addDateSeconds(date, 1) = " + addDateSeconds(date, 1));System.out.println("addDateSeconds(date, -2) = " + addDateSeconds(date, -2));System.out.println("addDateMinutes(date,0) = " + addDateMinutes(date, 0));System.out.println("addDateMinutes(date,1) = " + addDateMinutes(date, 1));System.out.println("addDateMinutes(date,-2) = " + addDateMinutes(date, -2));System.out.println("addDateHours(date, 0) = " + addDateHours(date, 0));System.out.println("addDateHours(date, 1) = " + addDateHours(date, 1));System.out.println("addDateHours(date, -2) = " + addDateHours(date, -2));System.out.println("addDateDays(date,0) = " + addDateDays(date, 0));System.out.println("addDateDays(date,1) = " + addDateDays(date, 1));System.out.println("addDateDays(date, -2) = " + addDateDays(date, -2));System.out.println("addDateWeeks(date,0) = " + addDateWeeks(date, 0));System.out.println("addDateWeeks(date,1) = " + addDateWeeks(date, 1));System.out.println("addDateMonths(date, 1) = " + addDateMonths(date, 1));System.out.println("addDateMonths(date, -2) = " + addDateMonths(date, -2));System.out.println("addDateYears(date, 0) = " + addDateYears(date, 0));System.out.println("addDateYears(date, 1) = " + addDateYears(date, 1));System.out.println("addDateYears(date, -2) = " + addDateYears(date, -2));System.out.println("=============******Date日期比较方法*********==============");Date date1 = new Date();Date date2 = new Date();System.out.println("compareEqualDateYYYY(date,date1) = " + compareEqualDateYYYY(date, date1));System.out.println("compareEqualDateYYYY(date,date2) = " + compareEqualDateYYYY(date, date2));System.out.println("compareEqualDateYYYY(date1,date2) = " + compareEqualDateYYYY(date1, date2));System.out.println("compareEqualDateYYYYJava8(date,date1) = " + compareEqualDateYYYYJava8(date, date1));System.out.println("compareEqualDateYYYYJava8(date,date2) = " + compareEqualDateYYYYJava8(date, date2));System.out.println("compareEqualDateYYYYJava8(date1,date2) = " + compareEqualDateYYYYJava8(date1, date2));System.out.println("compareEqualDateYYYYMM(date,date1) = " + compareEqualDateYYYYMM(date, date1));System.out.println("compareEqualDateYYYYMM(date,date2) = " + compareEqualDateYYYYMM(date, date2));System.out.println("compareEqualDateYYYYMM(date1,date2) = " + compareEqualDateYYYYMM(date1, date2));System.out.println("compareEqualDateYYYYMMJava8(date,date1) = " + compareEqualDateYYYYMMJava8(date, date1));System.out.println("compareEqualDateYYYYMMJava8(date,date2) = " + compareEqualDateYYYYMMJava8(date, date2));System.out.println("compareEqualDateYYYYMMJava8(date1,date2) = " + compareEqualDateYYYYMMJava8(date1, date2));System.out.println("compareEqualDateYYYYMMDD(date,date1) = " + compareEqualDateYYYYMMDD(date, date1));System.out.println("compareEqualDateYYYYMMDD(date,date2) = " + compareEqualDateYYYYMMDD(date, date2));System.out.println("compareEqualDateYYYYMMDD(date1,date2) = " + compareEqualDateYYYYMMDD(date1, date2));System.out.println("compareEqualDateYYYYMMDDJava8(date,date1) = " + compareEqualDateYYYYMMDDJava8(date, date1));System.out.println("compareEqualDateYYYYMMDDJava8(date,date2) = " + compareEqualDateYYYYMMDDJava8(date, date2));System.out.println("compareEqualDateYYYYMMDDJava8(date1,date2) = " + compareEqualDateYYYYMMDDJava8(date1, date2));System.out.println("compareEqualDateYYYYMMDDHHMMSS(date,date1) = " + compareEqualDateYYYYMMDDHHMMSS(date, date1));System.out.println("compareEqualDateYYYYMMDDHHMMSS(date,date2) = " + compareEqualDateYYYYMMDDHHMMSS(date, date2));System.out.println("compareEqualDateYYYYMMDDHHMMSS(date1,date2) = " + compareEqualDateYYYYMMDDHHMMSS(date1, date2));System.out.println("compareEqualDateYYYYMMDDHHMMSSJava8(date,date1) = " + compareEqualDateYYYYMMDDHHMMSSJava8(date, date1));System.out.println("compareEqualDateYYYYMMDDHHMMSSJava8(date,date2) = " + compareEqualDateYYYYMMDDHHMMSSJava8(date, date2));System.out.println("compareEqualDateYYYYMMDDHHMMSSJava8(date1,date2) = " + compareEqualDateYYYYMMDDHHMMSSJava8(date1, date2));// ==========检查两个时间之间的差异是否大于等于多少分钟==================// 创建两个时间示例Calendar calendar1 = Calendar.getInstance();Calendar calendar2 = Calendar.getInstance();// 设置时间(这里仅为示例,您可以根据需要设置实际时间)calendar1.set(2023, Calendar.OCTOBER, 1, 10, 0, 0); // 2023-10-01 10:00:00calendar2.set(2023, Calendar.OCTOBER, 1, 10, 31, 0); // 2023-10-01 10:31:00// 获取Date对象Date date3 = calendar1.getTime();Date date4 = calendar2.getTime();// 检查时间差是否大于等于30分钟if (isTimeDifferenceMoreThanOrEqual30Minutes(date3, date4)) {System.out.println("时间差大于等于30分钟");} else {System.out.println("时间差小于30分钟");}// ====根据年份获取所有月份====================List<String> traverseMonthsOfYear = traverseMonthsOfYear(2024);System.out.println("traverseMonthsOfYear = ");traverseMonthsOfYear.forEach(System.out::println);}

Date工具类源码

import com.google.common.collect.Lists;
import com.ruoyi.common.core.utils.StringUtils;
import org.joda.time.DateTime;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.List;public class DateUtils {/*** y:年份* M:月份* d:日期* H:小时(24小时制)* h:小时(12小时制)* m:分钟* s:秒钟* S:毫秒*/public final static String DATE_YYYY_PATTERN = "yyyy";public final static String DATE_YYYY_PATTERN2 = "yyyy年";public final static String DATE_MM_PATTERN = "MM";public final static String DATE_MM_PATTERN2 = "MM月";public final static String DATE_DD_PATTERN = "dd";public final static String DATE_DD_PATTERN2 = "dd日";public final static String TIME_HH_PATTERN = "HH";public final static String TIME_HH_PATTERN2 = "HH小时";public final static String TIME_hh_PATTERN = "hh小时";public final static String TIME_hh_PATTERN2 = "hh小时";public final static String TIME_MM_PATTERN = "mm";public final static String TIME_MM_PATTERN2 = "mm分钟";public final static String TIME_SS_PATTERN = "ss";public final static String TIME_SS_PATTERN2 = "ss秒";public final static String DATE_YYYY_MM_PATTERN = "yyyy-MM";public final static String DATE_YYYY_MM_PATTERN2 = "yyyy/MM";public final static String DATE_YYYY_MM_PATTERN3 = "yyyyMM";public final static String DATE_YYYY_MM_PATTERN4 = "yyyy.MM";public final static String DATE_YYYY_MM_PATTERN5 = "yyyy年MM月";public final static String DATE_MM_DD_PATTERN = "MM-dd";public final static String DATE_MM_DD_PATTERN2 = "MM/dd";public final static String DATE_MM_DD_PATTERN3 = "MMdd";public final static String DATE_MM_DD_PATTERN4 = "MM.dd";public final static String DATE_MM_DD_PATTERN5 = "MM月dd日";public final static String TIME_HH_MM_PATTERN = "HH:mm";public final static String TIME_hh_MM_PATTERN = "hh:mm";public final static String TIME_MM_SS_PATTERN = "mm:ss";public final static String TIME_HH_MM_SS_PATTERN = "HH:mm:ss";public final static String TIME_hh_MM_SS_PATTERN = "hh:mm:ss";public final static String DATE_PATTERN = "yyyy-MM-dd";public final static String DATE_PATTERN2 = "yyyy/MM/dd";public final static String DATE_PATTERN3 = "yyyyMMdd";public final static String DATE_PATTERN4 = "yyyy.MM.dd";public final static String DATE_PATTERN5 = "yyyy年MM月dd日";public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";public final static String DATE_TIME_PATTERN2 = "yyyyMMddHHmmss";public final static String DATE_TIME_PATTERN3 = "yyyy/MM/dd HH:mm:ss";public final static String DATE_TIME_PATTERN4 = "yyyy.MM.dd HH:mm:ss";public final static String DATE_TIME_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss";public final static String DATE_TIME_PATTERN6 = "yyyy年MM月dd日 HH时mm分ss秒";public final static String DATE_TIME_PATTERN7 = "yyyy年MM月dd日 HH小时mm分钟ss秒";public final static String DATE_TIME_PATTERN8 = "yyyy年MM月dd日HH小时mm分钟ss秒";public final static String DATE_TIME_h_PATTERN = "yyyy-MM-dd hh:mm:ss";public final static String DATE_TIME_h_PATTERN2 = "yyyyMMddhhmmss";public final static String DATE_TIME_h_PATTERN3 = "yyyy/MM/dd hh:mm:ss";public final static String DATE_TIME_h_PATTERN4 = "yyyy.MM.dd hh:mm:ss";public final static String DATE_TIME_h_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss";public final static String DATE_TIME_h_PATTERN6 = "yyyy年MM月dd日 hh时mm分ss秒";public final static String DATE_TIME_h_PATTERN7 = "yyyy年MM月dd日 hh小时mm分钟ss秒";public final static String DATE_TIME_h_PATTERN8 = "yyyy年MM月dd日hh小时mm分钟ss秒";public final static String DATE_TIME_SSS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";public final static String DATE_TIME_SSS_PATTERN2 = "yyyyMMddHHmmssSSS";public final static String DATE_TIME_SSS_PATTERN3 = "yyyy/MM/dd HH:mm:ss.SSS";public final static String DATE_TIME_SSS_PATTERN4 = "yyyy.MM.dd HH:mm:ss.SSS";public final static String DATE_TIME_SSS_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss.SSS";public final static String DATE_TIME_h_SSS_PATTERN = "yyyy-MM-dd hh:mm:ss.SSS";public final static String DATE_TIME_h_SSS_PATTERN2 = "yyyyMMddhhmmssSSS";public final static String DATE_TIME_h_SSS_PATTERN3 = "yyyy/MM/dd hh:mm:ss.SSS";public final static String DATE_TIME_h_SSS_PATTERN4 = "yyyy.MM.dd hh:mm:ss.SSS";public final static String DATE_TIME_h_SSS_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss.SSS";public static String[] WEEK_ARRAY = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};public static String[] WEEK_ARRAY_CN = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};public static String[] WEEK_ARRAY_CN_TOW = {"", "周一", "周二", "周三", "周四", "周五", "周六", "周日"};// ===========================****************Date转String方法****************===========================/*** Date转 格式:DATE_YYYY_PATTERN = "yyyy";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYY(Date date) {return format(date, DATE_YYYY_PATTERN);}/*** Date转 格式:DATE_YYYY_PATTERN2 = "yyyy年";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYY2(Date date) {return format(date, DATE_YYYY_PATTERN2);}/*** Date转 格式:DATE_MM_PATTERN = "MM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMM(Date date) {return format(date, DATE_MM_PATTERN);}/*** Date转 格式:DATE_MM_PATTERN2 = "MM月";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMM2(Date date) {return format(date, DATE_MM_PATTERN2);}/*** Date转 格式:DATE_DD_PATTERN = "dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateDD(Date date) {return format(date, DATE_DD_PATTERN);}/*** Date转 格式:DATE_DD_PATTERN2 = "dd日";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateDD2(Date date) {return format(date, DATE_DD_PATTERN2);}/*** Date转 格式:DATE_YYYY_MM_PATTERN = "yyyy-MM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYYMM(Date date) {return format(date, DATE_YYYY_MM_PATTERN);}/*** Date转 格式:DATE_YYYY_MM_PATTERN2 = "yyyy/MM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYYMM2(Date date) {return format(date, DATE_YYYY_MM_PATTERN2);}/*** Date转 格式:DATE_YYYY_MM_PATTERN3 = "yyyyMM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYYMM3(Date date) {return format(date, DATE_YYYY_MM_PATTERN3);}/*** Date转 格式:DATE_YYYY_MM_PATTERN4 = "yyyy.MM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYYMM4(Date date) {return format(date, DATE_YYYY_MM_PATTERN4);}/*** Date转 格式: DATE_YYYY_MM_PATTERN5 = "yyyy年MM";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateYYYYMM5(Date date) {return format(date, DATE_YYYY_MM_PATTERN5);}/*** Date转 格式: DATE_MM_DD_PATTERN = "MM-dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMMDD(Date date) {return format(date, DATE_MM_DD_PATTERN);}/*** Date转 格式: DATE_MM_DD_PATTERN2 = "MM/dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMMDD2(Date date) {return format(date, DATE_MM_DD_PATTERN2);}/*** Date转 格式: DATE_MM_DD_PATTERN3 = "MMdd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMMDD3(Date date) {return format(date, DATE_MM_DD_PATTERN3);}/*** Date转 格式: DATE_MM_DD_PATTERN4 = "MM.dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMMDD4(Date date) {return format(date, DATE_MM_DD_PATTERN4);}/*** Date转 格式: DATE_MM_DD_PATTERN5 = "MM年dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateMMDD5(Date date) {return format(date, DATE_MM_DD_PATTERN5);}/*** Date转 格式: DATE_PATTERN = "yyyy-MM-dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDate(Date date) {return format(date, DATE_PATTERN);}/*** Date转 格式: DATE_PATTERN2 = "yyyy/MM/dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDate2(Date date) {return format(date, DATE_PATTERN2);}/*** Date转 格式: DATE_PATTERN3 = "yyyyMMdd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDate3(Date date) {return format(date, DATE_PATTERN3);}/*** Date转 格式: DATE_PATTERN4 = "yyyy.MM.dd";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDate4(Date date) {return format(date, DATE_PATTERN4);}/*** Date转 格式: DATE_PATTERN5 = "yyyy年MM月dd日";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDate5(Date date) {return format(date, DATE_PATTERN5);}// ===========================****************String类型日期转Date方法****************===========================/*** String类型日期转Date方法** @param date 日期* @return Date日期对象*/public static Date parseDate(String date) {return parseDate(date, DATE_PATTERN);}/*** String类型日期转Date方法** @param date    日期* @param pattern 规则* @return Date日期对象*/public static Date parseDate(String date, String pattern) {if (StringUtils.isBlank(date)) {return null;}if (StringUtils.isBlank(pattern)) {pattern = DATE_PATTERN;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);try {return sdf.parse(date);} catch (ParseException e) {return null;}}// ===========================****************DateTime转String方法****************===========================/*** Date转 格式: TIME_HH_PATTERN = "HH";** @param date 日期 (24小时制)* @return 格式化后的日期字符串*/public static String formatTimeHH(Date date) {return format(date, TIME_HH_PATTERN);}/*** Date转 格式: TIME_hh_PATTERN = "hh";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatTimeHh(Date date) {return format(date, TIME_hh_PATTERN);}/*** Date转 格式:TIME_HH_PATTERN2 = "HH小时";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeHH2(Date date) {return format(date, TIME_HH_PATTERN2);}/*** Date转 格式: TIME_hh_PATTERN2 = "hh小时";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatTimeHh2(Date date) {return format(date, TIME_hh_PATTERN2);}/*** Date转 格式:TIME_MM_PATTERN = "mm";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeMM(Date date) {return format(date, TIME_MM_PATTERN);}/*** Date转 格式:TIME_MM_PATTERN2 = "mm分钟";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeMM2(Date date) {return format(date, TIME_MM_PATTERN2);}/*** Date转 格式:TIME_SS_PATTERN = "ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeSS(Date date) {return format(date, TIME_SS_PATTERN);}/*** Date转 格式:TIME_SS_PATTERN2 = "ss秒";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeSS2(Date date) {return format(date, TIME_SS_PATTERN2);}/*** Date转 格式:TIME_HH_MM_PATTERN = "HH:mm";** @param date 日期 (24小时制)* @return 格式化后的日期字符串*/public static String formatTimeHHMM(Date date) {return format(date, TIME_HH_MM_PATTERN);}/*** Date转 格式:TIME_hh_MM_PATTERN = "hh:mm";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatTimeHhMM(Date date) {return format(date, TIME_hh_MM_PATTERN);}/*** Date转 格式:TIME_MM_SS_PATTERN = "mm:ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatTimeMMSS(Date date) {return format(date, TIME_MM_SS_PATTERN);}/*** Date转 格式:TIME_HH_MM_SS_PATTERN = "HH:mm:ss";** @param date 日期 (24小时制)* @return 格式化后的日期字符串*/public static String formatTimeHHMMSS(Date date) {return format(date, TIME_HH_MM_SS_PATTERN);}/*** Date转 格式:TIME_hh_MM_SS_PATTERN = "hh:mm:ss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatTimeHhMMSS(Date date) {return format(date, TIME_hh_MM_SS_PATTERN);}/*** Date转 格式:DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime(Date date) {return format(date, DATE_TIME_PATTERN);}/*** Date转 格式:DATE_TIME_PATTERN2 = "yyyyMMddHHmmss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime2(Date date) {return format(date, DATE_TIME_PATTERN2);}/*** Date转 格式:DATE_TIME_PATTERN3 = "yyyy/MM/dd HH:mm:ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime3(Date date) {return format(date, DATE_TIME_PATTERN3);}/*** Date转 格式:DATE_TIME_PATTERN4 = "yyyy.MM.dd HH:mm:ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime4(Date date) {return format(date, DATE_TIME_PATTERN4);}/*** Date转 格式:DATE_TIME_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime5(Date date) {return format(date, DATE_TIME_PATTERN5);}/*** Date转 格式:DATE_TIME_PATTERN6 = "yyyy年MM月dd日 HH时mm分ss秒";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime6(Date date) {return format(date, DATE_TIME_PATTERN6);}/*** Date转 格式:DATE_TIME_PATTERN7 = "yyyy年MM月dd日 HH小时mm分钟ss秒";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime7(Date date) {return format(date, DATE_TIME_PATTERN7);}/*** Date转 格式:DATE_TIME_PATTERN8 = "yyyy年MM月dd日HH小时mm分钟ss秒";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTime8(Date date) {return format(date, DATE_TIME_PATTERN8);}/*** Date转 格式:DATE_TIME_h_PATTERN = "yyyy-MM-dd hh:mm:ss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH(Date date) {return format(date, DATE_TIME_h_PATTERN);}/*** Date转 格式:DATE_TIME_h_PATTERN2 = "yyyyMMddhhmmss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH2(Date date) {return format(date, DATE_TIME_h_PATTERN2);}/*** Date转 格式:DATE_TIME_h_PATTERN3 = "yyyy/MM/dd hh:mm:ss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH3(Date date) {return format(date, DATE_TIME_h_PATTERN3);}/*** Date转 格式:DATE_TIME_h_PATTERN4 = "yyyy.MM.dd hh:mm:ss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH4(Date date) {return format(date, DATE_TIME_h_PATTERN4);}/*** Date转 格式:DATE_TIME_h_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH5(Date date) {return format(date, DATE_TIME_h_PATTERN5);}/*** Date转 格式:DATE_TIME_h_PATTERN6 = "yyyy年MM月dd日 hh时mm分ss秒";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH6(Date date) {return format(date, DATE_TIME_h_PATTERN6);}/*** Date转 格式:DATE_TIME_h_PATTERN7 = "yyyy年MM月dd日 hh小时mm分钟ss秒";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH7(Date date) {return format(date, DATE_TIME_h_PATTERN7);}/*** Date转 格式:DATE_TIME_h_PATTERN8 = "yyyy年MM月dd日hh小时mm分钟ss秒";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeH8(Date date) {return format(date, DATE_TIME_h_PATTERN8);}/*** Date转 格式:DATE_TIME_SSS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTimeSSS(Date date) {return format(date, DATE_TIME_SSS_PATTERN);}/*** Date转 格式:DATE_TIME_SSS_PATTERN2 = "yyyyMMddHHmmssSSS";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTimeSSS2(Date date) {return format(date, DATE_TIME_SSS_PATTERN2);}/*** Date转 格式:DATE_TIME_SSS_PATTERN3 = "yyyy/MM/dd HH:mm:ss.SSS";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTimeSSS3(Date date) {return format(date, DATE_TIME_SSS_PATTERN3);}/*** Date转 格式:DATE_TIME_SSS_PATTERN4 = "yyyy.MM.dd HH:mm:ss.SSS";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTimeSSS4(Date date) {return format(date, DATE_TIME_SSS_PATTERN4);}/*** Date转 格式:DATE_TIME_SSS_PATTERN5 = "yyyy年MM月dd日 HH:mm:ss.SSS";** @param date 日期* @return 格式化后的日期字符串*/public static String formatDateTimeSSS5(Date date) {return format(date, DATE_TIME_SSS_PATTERN5);}/*** Date转 格式:DATE_TIME_h_SSS_PATTERN = "yyyy-MM-dd hh:mm:ss.SSS";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeHSSS(Date date) {return format(date, DATE_TIME_h_SSS_PATTERN);}/*** Date转 格式:DATE_TIME_h_SSS_PATTERN2 = "yyyyMMddhhmmssSSS";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeHSSS2(Date date) {return format(date, DATE_TIME_h_SSS_PATTERN2);}/*** Date转 格式:DATE_TIME_h_SSS_PATTERN3 = "yyyy/MM/dd hh:mm:ss.SSS";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeHSSS3(Date date) {return format(date, DATE_TIME_h_SSS_PATTERN3);}/*** Date转 格式:DATE_TIME_h_SSS_PATTERN4 = "yyyy.MM.dd hh:mm:ss.SSS";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeHSSS4(Date date) {return format(date, DATE_TIME_h_SSS_PATTERN4);}/*** Date转 格式:DATE_TIME_h_SSS_PATTERN5 = "yyyy年MM月dd日 hh:mm:ss.SSS";** @param date 日期 (12小时制)* @return 格式化后的日期字符串*/public static String formatDateTimeHSSS5(Date date) {return format(date, DATE_TIME_h_SSS_PATTERN5);}/*** Date转字符串公共格式化方法** @param date    日期* @param pattern 格式,格式化默认为yyyy-MM-dd* @return 格式化后的日期字符串*/public static String format(Date date, String pattern) {try {if (date != null) {if (StringUtils.isBlank(pattern)) {pattern = DATE_PATTERN;}SimpleDateFormat df = new SimpleDateFormat(pattern);return df.format(date);}} catch (Exception e) {return null;}return null;}// ===========================****************Date获取时间戳方法****************===========================/*** 获取当前时间的时间戳** @return 当前时间的时间戳*/public static long getNowTimestamp() {Date now = new Date();return getDateTimestamp(now);}/*** 获取指定时间的时间戳** @param date 指定时间* @return 时间戳*/public static long getDateTimestamp(Date date) {if (date == null) {return 0;}return date.getTime();}// ===========================****************String类型日期获取时间戳方法****************===========================/*** 获取指定时间的时间戳** @param date 指定时间*             格式为 yyyy-MM-dd* @return 时间戳*/public static long getDateTimestampByYYYYMMDD(String date) {if (StringUtils.isBlank(date)) {return 0;}return getDateTimestamp(parseDate(date));}/*** 获取指定时间的时间戳** @param date 指定时间*             格式为 yyyy-MM-dd* @return 时间戳*/public static long getDateTimestampByYYYYMMDDHHMMSS(String date) {if (StringUtils.isBlank(date)) {return 0;}return getDateTimestamp(parseDate(date, DATE_TIME_PATTERN));}// =============******Date日期对【秒】【分钟】【小时】【天】【周】【月】【年】进行加(+)/减(-)方法*********==============/*** 对日期的【秒】进行加/减** @param date    日期* @param seconds 秒数,负数为减* @return 加/减几秒后的日期*/public static Date addDateSeconds(Date date, int seconds) {return getDateTime(date) != null ? getDateTime(date).plusSeconds(seconds).toDate() : null;}/*** 对日期的【分钟】进行加/减** @param date    日期* @param minutes 分钟数,负数为减* @return 加/减几分钟后的日期*/public static Date addDateMinutes(Date date, int minutes) {return getDateTime(date) != null ? getDateTime(date).plusMinutes(minutes).toDate() : null;}/*** 对日期的【小时】进行加/减** @param date  日期* @param hours 小时数,负数为减* @return 加/减几小时后的日期*/public static Date addDateHours(Date date, int hours) {return getDateTime(date) != null ? getDateTime(date).plusHours(hours).toDate() : null;}/*** 对日期的【天】进行加/减** @param date 日期* @param days 天数,负数为减* @return 加/减几天后的日期*/public static Date addDateDays(Date date, int days) {return getDateTime(date) != null ? getDateTime(date).plusDays(days).toDate() : null;}/*** 对日期的【周】进行加/减** @param date  日期* @param weeks 周数,负数为减* @return 加/减几周后的日期*/public static Date addDateWeeks(Date date, int weeks) {return getDateTime(date) != null ? getDateTime(date).plusWeeks(weeks).toDate() : null;}/*** 对日期的【月】进行加/减** @param date   日期* @param months 月数,负数为减* @return 加/减几月后的日期*/public static Date addDateMonths(Date date, int months) {return getDateTime(date) != null ? getDateTime(date).plusMonths(months).toDate() : null;}/*** 对日期的【年】进行加/减** @param date  日期* @param years 年数,负数为减* @return 加/减几年后的日期*/public static Date addDateYears(Date date, int years) {return getDateTime(date) != null ? getDateTime(date).plusYears(years).toDate() : null;}/*** 获取日期时间对象** @param date 日期* @return 日期时间对象*/public static DateTime getDateTime(Date date) {if (date == null) {return null;}return new DateTime(date);}// =============******Date日期比较方法*********==============/*** 比较两个时间是否相等,只比较年** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYY(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 清除时、分、秒和毫秒cal1.set(Calendar.HOUR_OF_DAY, 0);cal1.set(Calendar.MINUTE, 0);cal1.set(Calendar.SECOND, 0);cal1.set(Calendar.MILLISECOND, 0);cal2.set(Calendar.HOUR_OF_DAY, 0);cal2.set(Calendar.MINUTE, 0);cal2.set(Calendar.SECOND, 0);cal2.set(Calendar.MILLISECOND, 0);// 现在只比较年return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);}/*** 比较两个时间是否相等,只比较年* (Java8+)** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYJava8(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();// 现在只比较年return ld1.getYear() == ld2.getYear();}/*** 比较两个时间是否相等,只比较年月** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMM(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 清除时、分、秒和毫秒cal1.set(Calendar.HOUR_OF_DAY, 0);cal1.set(Calendar.MINUTE, 0);cal1.set(Calendar.SECOND, 0);cal1.set(Calendar.MILLISECOND, 0);cal2.set(Calendar.HOUR_OF_DAY, 0);cal2.set(Calendar.MINUTE, 0);cal2.set(Calendar.SECOND, 0);cal2.set(Calendar.MILLISECOND, 0);// 现在只比较年和月return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);}/*** 比较两个时间是否相等,只比较年月* (Java8+)** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMMJava8(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();// 现在只比较年和月return ld1.getYear() == ld2.getYear() &&ld1.getMonthValue() == ld2.getMonthValue();}/*** 比较两个时间是否相等,只比较年月日** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMMDD(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 清除时、分、秒和毫秒cal1.set(Calendar.HOUR_OF_DAY, 0);cal1.set(Calendar.MINUTE, 0);cal1.set(Calendar.SECOND, 0);cal1.set(Calendar.MILLISECOND, 0);cal2.set(Calendar.HOUR_OF_DAY, 0);cal2.set(Calendar.MINUTE, 0);cal2.set(Calendar.SECOND, 0);cal2.set(Calendar.MILLISECOND, 0);// 现在只比较年和月和日return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) &&cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH);}/*** 比较两个时间是否相等,只比较年月日* (Java8+)** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMMDDJava8(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();// 现在只比较年和月和日return ld1.getYear() == ld2.getYear() &&ld1.getMonthValue() == ld2.getMonthValue() &&ld1.getDayOfMonth() == ld2.getDayOfMonth();}/*** 比较两个时间是否相等,只比较年月日时分秒** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMMDDHHMMSS(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 清除毫秒cal1.set(Calendar.MILLISECOND, 0);cal2.set(Calendar.MILLISECOND, 0);// 现在只比较年和月和日、时分秒return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) &&cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH) &&cal1.get(Calendar.HOUR_OF_DAY) == cal2.get(Calendar.HOUR_OF_DAY) &&cal1.get(Calendar.MINUTE) == cal2.get(Calendar.MINUTE) &&cal1.get(Calendar.SECOND) == cal2.get(Calendar.SECOND);}/*** 比较两个时间是否相等,只比较年月日时分秒* (Java8+)** @param date1 时间1* @param date2 时间2* @return 是否相等*/public static boolean compareEqualDateYYYYMMDDHHMMSSJava8(Date date1, Date date2) {if (date1 == null || date2 == null) {return false;}LocalDateTime ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDateTime();LocalDateTime ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDateTime();// 现在只比较年和月和日、时分秒return ld1.getYear() == ld2.getYear() &&ld1.getMonthValue() == ld2.getMonthValue() &&ld1.getDayOfMonth() == ld2.getDayOfMonth() &&ld1.getHour() == ld2.getHour() &&ld1.getMinute() == ld2.getMinute() &&ld1.getSecond() == ld2.getSecond();}/*** 比较两个时间大小,只比较年* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYY(Date date1, Date date2) {Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 提取年份和月份int year1 = cal1.get(Calendar.YEAR);int year2 = cal2.get(Calendar.YEAR);// 首先比较年份,如果年份不同,则直接返回结果if (year1 != year2) {return Integer.compare(year1, year2);}return 0;}/*** 比较两个时间大小,只比较年* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYJava8(Date date1, Date date2) {LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();return Integer.compare(ld1.getYear(), ld2.getYear());}/*** 比较两个时间大小,只比较年月* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMM(Date date1, Date date2) {Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 提取年份和月份int year1 = cal1.get(Calendar.YEAR);int month1 = cal1.get(Calendar.MONTH); // 注意:Calendar中的月份是从0开始的int year2 = cal2.get(Calendar.YEAR);int month2 = cal2.get(Calendar.MONTH);// 首先比较年份,如果年份不同,则直接返回结果if (year1 != year2) {return Integer.compare(year1, year2);}// 如果年份相同,则比较月份return Integer.compare(month1, month2);}/*** 比较两个时间大小,只比较年月* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMMJava8(Date date1, Date date2) {LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();// 如果年份相同,则比较月份return Integer.compare(ld1.getYear() * 100 + ld1.getMonthValue(),ld2.getYear() * 100 + ld2.getMonthValue());}/*** 比较两个时间大小,只比较年月日* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMMDD(Date date1, Date date2) {Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 提取年份和月份int year1 = cal1.get(Calendar.YEAR);int month1 = cal1.get(Calendar.MONTH); // 注意:Calendar中的月份是从0开始的int day1 = cal1.get(Calendar.DAY_OF_MONTH);int year2 = cal2.get(Calendar.YEAR);int month2 = cal2.get(Calendar.MONTH);int day2 = cal2.get(Calendar.DAY_OF_MONTH);// 首先比较年份,如果年份不同,则直接返回结果if (year1 != year2) {return Integer.compare(year1, year2);}if (month1 != month2) {// 如果年份相同,则比较月份return Integer.compare(month1, month2);}// 如果月份相同,则比较日期return Integer.compare(day1, day2);}/*** 比较两个时间大小,只比较年月日* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMMDDJava8(Date date1, Date date2) {LocalDate ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDate();LocalDate ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDate();// 使用LocalDate的compareTo方法来比较年月日return ld1.compareTo(ld2);}/*** 比较两个时间大小,只比较年月日时分秒* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMMDDHHMMSS(Date date1, Date date2) {Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);// 清除毫秒部分(如果需要的话,实际上Calendar的比较默认就会忽略毫秒)// 但为了明确表明我们的意图,我们可以将毫秒设置为0cal1.set(Calendar.MILLISECOND, 0);cal2.set(Calendar.MILLISECOND, 0);// 比较两个Calendar对象if (cal1.equals(cal2)) {return 0;} else if (cal1.before(cal2)) {return -1;} else {return 1;}}/*** 比较两个时间大小,只比较年月日时分秒* 注意:时间参数不可为空** @param date1 时间1* @param date2 时间2* @return >0 : 时间1 大于(>) 时间2* <0 : 时间1 小于(<) 时间2* =0 : 时间1 等于(=) 时间2*/public static int compareDateYYYYMMDDHHMMSSJava8(Date date1, Date date2) {LocalDateTime ld1 = ZonedDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()).toLocalDateTime();LocalDateTime ld2 = ZonedDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).toLocalDateTime();// 使用LocalDate的compareTo方法来比较年月日return ld1.compareTo(ld2);}/*** 检查两个时间之间的差异是否大于等于30分钟** @param date1 第一个时间* @param date2 第二个时间* @return 如果时间差大于等于30分钟,则返回true;否则返回false*/public static boolean isTimeDifferenceMoreThanOrEqual30Minutes(Date date1, Date date2) {long diffInMillis = Math.abs(date2.getTime() - date1.getTime()); // 计算时间差(毫秒)long diffInMinutes = diffInMillis / (1000 * 60); // 将毫秒转换为分钟return diffInMinutes >= 30;}/*** 检查两个时间之间的差异是否大于等于多少分钟** @param date1 第一个时间* @param date2 第二个时间* @param num 多少分钟,自定义* @return 如果时间差大于等于30分钟,则返回true;否则返回false*/public static boolean isTimeDifferenceMoreThanOrEqual30Minutes(Date date1, Date date2, Integer num) {long diffInMillis = Math.abs(date2.getTime() - date1.getTime()); // 计算时间差(毫秒)long diffInMinutes = diffInMillis / (1000 * 60); // 将毫秒转换为分钟return diffInMinutes >= 30;}// =============******Date日期获取方法*********==============/*** 根据年份获取所有月份* @param year 年份* @return 所有月份*/public static List<String> traverseMonthsOfYear(Integer year){if(year == null){return Lists.newArrayList();}// 遍历年份和月份Calendar calendar = Calendar.getInstance();calendar.set(year, Calendar.JANUARY, 1); // 设置为2024年1月1日List<String> months = Lists.newArrayList();while (calendar.get(Calendar.YEAR) == year) { // 假设只处理2024年的数据int month = calendar.get(Calendar.MONTH) + 1; // 月份是从0开始的,所以要加1months.add(String.valueOf(month));// 移动到下一个月calendar.add(Calendar.MONTH, 1);}return months;}/*** 根据年份+月份获取月份的所有周* @param year 年份* @param month 月份* @return 所有周*/public static List<String> traverseWeeksOfMonth(Integer year, Integer month) {if(year == null || month == null){return Lists.newArrayList();}Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1); // 设置日期为月份的第一天List<String> weeks = Lists.newArrayList();// 循环直到我们到达下一个月的第一天while (calendar.get(Calendar.MONTH) == month - 1) {int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);weeks.add(String.valueOf(weekOfYear));// 移动到下一天calendar.add(Calendar.WEEK_OF_MONTH, 1);// 如果我们已经到达了下个月,则退出循环if (calendar.get(Calendar.WEEK_OF_MONTH) == 1 && calendar.get(Calendar.MONTH) != month - 1) {break;}}return weeks;}/*** 根据年份+月份获取月份的所有天* @param year 年份* @param month 月份* @return 所有天 (格式:日)*/public static List<String> traverseDaysOfMonth(Integer year, Integer month) {if(year == null || month == null){return Lists.newArrayList();}List<String> days = Lists.newArrayList();Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1); // 注意月份是从0开始的// 遍历当月的每一天while (calendar.get(Calendar.MONTH) == month - 1) {int day = calendar.get(Calendar.DAY_OF_MONTH);days.add(String.valueOf(day));// 移动到下一天calendar.add(Calendar.DAY_OF_MONTH, 1);}return days;}/*** 根据年份+月份获取月份的所有天* 跨年跨月* @return 所有天  (格式:月-日)*/public static List<String> traverseDaysOfMonth(Integer startYear, Integer startMonth, Integer startDay,Integer endYear, Integer endMonth, Integer endDay) {if(startYear == null || startMonth == null || startDay == null|| endYear == null || endMonth == null || endDay == null){return Lists.newArrayList();}List<String> days = Lists.newArrayList();Calendar startDate = Calendar.getInstance();startDate.set(startYear, startMonth - 1, startDay); // 注意月份是从0开始的,所以12月是Calendar.DECEMBERCalendar endDate = Calendar.getInstance();endDate.set(endYear, endMonth - 1, endDay);// 循环遍历并打印每一天while (!startDate.after(endDate)) {// 打印日期,使用SimpleDateFormat来格式化日期输出// 这里简单使用toString()展示,实际使用中可以根据需要格式化int year = startDate.get(Calendar.YEAR);int month = startDate.get(Calendar.MONTH);int day = startDate.get(Calendar.DAY_OF_MONTH);days.add(((month + 1) < 10 ? "0" + (month + 1) : (month + 1))+ "-"+ (day < 10 ? "0" + day : day));// 将startDate向前推进一天startDate.add(Calendar.DAY_OF_MONTH, 1);}return days;}/*** 根据年份+月份获取指定天的所有小时* @param year 年份* @param month 月份* @return 所有小时*/public static List<String> traverseHoursOfDay(Integer year, Integer month, Integer day){if(year == null || month == null || day == null){return Lists.newArrayList();}List<String> hours = Lists.newArrayList();// 设置Calendar实例为某一天(例如,2023年1月1日)Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, day); // 注意月份是从0开始的// 获取当前时间Calendar curCalendar = Calendar.getInstance();// 获取当前时间的日期int curDayOfMonth = curCalendar.get(Calendar.DAY_OF_MONTH);// 获取当前时间的小时(24小时制)int curHour = curCalendar.get(Calendar.HOUR_OF_DAY);// 遍历当天的每一个小时for (int hour = 0; hour < 24; hour++) {// 设置小时calendar.set(Calendar.HOUR_OF_DAY, hour);// 获取并打印当前时间(这里只打印日期和小时,分钟和秒设为0)// 注意:如果你想要包含分钟和秒,可以保持它们为当前值或显式设置为0calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);hours.add((hourOfDay < 10 ? "0" + hourOfDay : String.valueOf(hourOfDay)) + ":00");if(dayOfMonth == curDayOfMonth && hourOfDay == curHour){break;}}return hours;}}

作者:筱白爱学习!!

欢迎关注转发评论点赞沟通,您的支持是筱白的动力!

相关文章:

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类&#xff0c;主要包含Java-jdk8以下版本的Date相关使用方法&#xff0c;可以方便的在工作中灵活的应用&#xff0c;在个人工作期间频繁使用这些时间的格…...

TMUX1308PWR规格书 数据手册 具有注入电流控制功能的 5V 双向 8:1单通道和 4:1 双通道多路复用器芯片

TMUX1308 和 TMUX1309 为通用互补金属氧化物半导体 (CMOS) 多路复用器 (MUX)。TMUX1308 是 8:1单通道&#xff08;单端&#xff09;多路复用器&#xff0c;而 TMUX1309 是 4:1 双通道&#xff08;差分&#xff09;多路复用器。这些器件可在源极 (Sx) 和漏极 (Dx) 引脚上支持从 …...

证件照怎么换底色?简单又快速!不看后悔

一、引言 证件照在我们的生活中有着广泛的应用&#xff0c;无论是求职、考试还是办理各种证件&#xff0c;都需要用到不同底色的证件照。传统的换底色方法往往比较复杂&#xff0c;需要一定的专业技能和软件操作经验。但是现在&#xff0c;有了更简单快捷的方法&#xff0c;让你…...

Rust 基础语法与常用特性

Rust 跨界&#xff1a;全面掌握跨平台应用开发 第一章&#xff1a;快速上手 Rust 1.2 基础语法与常用特性 1.2.1 数据类型与控制流 数据类型 Rust 提供了丰富的内置数据类型&#xff0c;主要分为标量类型和复合类型。 标量类型 标量类型表示单一的值&#xff0c;Rust 中…...

一、开发环境的搭建

环境搭建步骤&#xff1a; 下载软件安装软件运行软件 其他&#xff1a; Visual studio 安装包文件&#xff1a;https://www.alipan.com/s/nd5RgzD4e3b 下载软件 在浏览器中搜索Visual studio&#xff0c;选择如图的选项 点击该区域&#xff0c;进入该页面&#xff0c;【或…...

Docker:存储原理

Docker&#xff1a;存储原理 镜像联合文件系统overlay镜像存储结构容器存储结构 存储卷绑定挂载存储卷结构 镜像 联合文件系统 联合文件系统Union File System是一种分层&#xff0c;轻量且高效的文件系统。其将整个文件系统分为多个层&#xff0c;层与层之间进行覆盖&#x…...

ts:数组的常用方法(push、pop、shift、unshift、splice、slice)

前端css中filter的使用 一、主要内容说明二、例子&#xff08;一&#xff09;、push方法&#xff08;尾添加&#xff09;1.源码1 &#xff08;push方法&#xff09;2.源码1运行效果 &#xff08;二&#xff09;、pop方法&#xff08;尾删除&#xff09;1.源码2&#xff08;pop方…...

物联网网关确保设备安全

物联网&#xff08;IoT&#xff09;网关在确保设备安全方面扮演着至关重要的角色。 作为连接物联网设备和云端或企业系统的中介&#xff0c;物联网网关可以实施多种安全措施来保护设备和数据。 是物联网网关确保设备安全的关键方法&#xff1a; 1. 设备认证和授权 认证&…...

Vue学习笔记(五)

Class绑定 数据绑定的一个常见需求场景式操纵元素的CSS class列表&#xff0c;因为class是attribute,我们可以和其他attribute一样使用v-bind将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c;通过拼接生成字符串是麻烦且易出错的。因此&#xf…...

Nestjs返回格式小结

在 NestJS 中&#xff0c;除了 text/event-stream&#xff08;用于 Server-Sent Events&#xff09;之外&#xff0c;还有多种格式的返回方式&#xff0c;具体取决于你的应用需求。以下是一些常见的返回格式及其示例&#xff1a; 1. JSON 格式 Get(json) getJsonResponse(Res…...

【力扣刷题实战】相同的树

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 相同的树 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 示例 3&#xff1a; 解题思路 题目理解 算法选择 具体思路 解题要点 完整代码&#xff08;C语言&#xff09; 兄弟们共勉 &#…...

Golang | Leetcode Golang题解之第515题在每个树行中找最大值

题目&#xff1a; 题解&#xff1a; func largestValues(root *TreeNode) (ans []int) {if root nil {return}q : []*TreeNode{root}for len(q) > 0 {maxVal : math.MinInt32tmp : qq nilfor _, node : range tmp {maxVal max(maxVal, node.Val)if node.Left ! nil {q …...

Zookeeper 对于 Kafka 的作用是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper 对于 Kafka 的作用是什么&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Zookeeper 对于 Kafka 的作用是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 在 Kafka…...

Thread类及线程的核心操作

一. Thread类的常见构造方法 1. Thread() Thread类无参的构造方法, 用于创建Thread类的实例对象. 2. Thread(String name) 带一个参数的Thread类构造方法, 创建一个线程对象, 并给其命名. [注]: 如果不专门给线程命名, 那么线程默认的名字就是Thread-0, Thread-1, Thread-…...

算法|牛客网华为机试11-20C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试1-10C 文章目录 HJ11 数字颠倒HJ12 字符串反转HJ13 句子逆序HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ16 购物单HJ17 坐标移动HJ18 识别有效的IP地址和掩码并进行分类统计HJ19 简单错误记录HJ20 密码验证…...

OpenAI低调发布多智能体工具Swarm:让多个智能体协同工作!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

性能之光 年度电竞性能旗舰iQOO 13发布

2024年10月30日&#xff0c;被定义为“性能之光”的年度电竞性能旗舰——iQOO 13正式发布&#xff0c;售价3999元起。iQOO 13作为iQOO 品牌在性能上的又一次深入探索&#xff0c;它像是一束光&#xff0c;引领行业不断拉高性能上限&#xff0c;让用户看到更多的可能性。 iQOO …...

如何避免因不熟悉数据保护法规而受损

在当今数字化时代&#xff0c;数据保护法规的遵守对于企业至关重要。不熟悉新的数据保护法规会导致法律风险增加、财务损失、声誉受损、客户信任下降等多方面的负面影响。其中&#xff0c;法律风险增加尤为严重&#xff0c;因为不符合规定可能引发高额罚款和法律诉讼。企业若未…...

LLaMA Factory 核心原理讲解

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

Java题集练习5

Java题集练习5&#xff08;集合&#xff09; 1.三种集合差别&#xff0c;集合类都是什么&#xff0c;数据结构是什么&#xff0c;都什么时候用 三者关系 Set集合 Set接口是Collection接口的一个子接口是无序的&#xff0c;set中不包含重复的元素&#xff0c;也就是说set中不…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...