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

news2024/10/27 16:46:20

# 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:00
        calendar2.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的比较默认就会忽略毫秒)
        // 但为了明确表明我们的意图,我们可以将毫秒设置为0
        cal1.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开始的,所以要加1
            months.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.DECEMBER
        Calendar 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)
            // 注意:如果你想要包含分钟和秒,可以保持它们为当前值或显式设置为0
            calendar.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;
    }

}

作者:筱白爱学习!!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 中等 740.删除并获得点数

文章目录 题目介绍题解 题目介绍 题解 由题意可知&#xff0c;在选择了数组中元素 a 后&#xff0c;该元素以及所有等于 a−1 和 a1 的元素都会从数组中删去&#xff0c;并获得 a 的点数。若还有多个值为 a的元素&#xff0c;由于所有等于 a−1 或 a1 的元素已经被删除&#x…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后&#xff0c;我们可以尝试理解一下Shell的原理&#xff0c;将各方知识串联起来&#xff0c;让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

信息安全工程师(72)网络安全风险评估概述

前言 网络安全风险评估是一项重要的技术任务&#xff0c;它涉及对网络系统、信息系统和网络基础设施的全面评估&#xff0c;以确定存在的安全风险和威胁&#xff0c;并量化其潜在影响以及可能的发生频率。 一、定义与目的 网络安全风险评估是指对网络系统中存在的潜在威胁和风险…

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息&#xff0c;例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事&#xff0c;如图…

基于SSM的汽车客运站管理系统【附源码】

基于SSM的汽车客运站管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 5 系统实现 5.1 管理员功能实现 5.1.1 管理员信息 5.1.2 车…

详细解读Movie Gen(2):个性化视频训练

Diffusion Models专栏文章汇总:入门与实战 前言:Meta最近重磅发布了视频生成30B的基础模型Movie Gen,长达93页的技术报告中干货满满,博主将详细解读Movie Gen的核心网络结构、个性化视频微调方法、视频编辑等方面。虽然大部分人没有直接预训练30B模型的机会,但是可以从中获…

C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化

目录 1. 多线程处理的基本概念 1.1 多线程的定义 1.2 线程的创建与管理 2. 多线程在游戏开发中的应用 2.1 渲染与物理计算 3. 多线程处理的性能提升 3.1 性能评估 3.2 任务分配策略 4. 多线程中的数据竞争 4.1 数据竞争的定义 4.2 多线程访问同一资源的后果 4.3 避…

视频剪辑新手必备:四款热门电脑视频剪辑软件评测

现在真的是一个视频流量的时代&#xff0c;不得不说&#xff0c;我都已经开始刷视频小说了&#xff01;如果你和我一样&#xff0c;是个对电脑视频剪辑充满好奇的新手&#xff0c;那么你一定想知道哪款软件最适合我们这些初学者。今天&#xff0c;我就来和大家分享一下我使用过…

gin入门教程(10):实现jwt认证

使用 github.com/golang-jwt/jwt 实现 JWT&#xff08;JSON Web Token&#xff09;可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例&#xff0c;演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

详解Pectra升级:如何影响以太坊价值及利益相关者

Pectra很可能是最后几个会直接影响用户和ETH持有者的升级之一。 原文&#xff1a;Galaxy Research&#xff1b;编译&#xff1a;Golem&#xff1b;编辑&#xff1a;郝方舟 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 编者按&#xff1a;以太坊 Pectr…

【SpringCloud】 K8s的滚动更新中明明已经下掉旧Pod,还是会把流量分到了不存活的节点

系列文章目录 文章目录 系列文章目录前言一、初步定位问题二、源码解释1.引入库核心问题代码进一步往下看【这块儿算是只是拓展了&#xff0c;问题其实处在上面的代码】Nacos是如何实现的&#xff1f; 如何解决 总结 前言 背景&#xff1a; 使用了SpringCloudGateWay 和 Sprin…

C++学习路线(二十五)

常见错误总结 错误1&#xff1a;对象const问题 #include <iostream>class Man { public:void walk() {std::cout << "I am walking." << std::endl;} };int main() {const Man man;man.walk();return 0; } 原因是Man man是const对象 但是调用了…

大语言模型的Scaling Law【Power Low】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 文章目录 NLP-大语言模型学习系列目录一、什么是…

Stable Diffusion视频插件Ebsynth Utility安装方法

一、Ebsynth Utility制作视频的优势&#xff1a; 相比其他视频制作插件&#xff0c;Ebsynth Utility生成的视频&#xff0c;画面顺滑无闪烁&#xff0c;对显存要求相对不高。渲染速度也还可以接受。其基本过程为&#xff1a; 1、将参考视频分解为单个帧&#xff0c;并同时生成…

模型训练识别手写数字(二)

模型训练识别手写数字&#xff08;一&#xff09;使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…

GitHub下载参考

1.Git下载 Git下载https://blog.csdn.net/mengxiang_/article/details/128193219 注意&#xff1a;根据电脑的系统配置选择合适的版本&#xff0c;我安装的是64.exe的版本 2.Git右键不出现问题&#xff1a; Git右键不出现https://blog.csdn.net/ling1998/article/details/1…

Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 马拉松运动…

[SWPUCTF 2022 新生赛]py1的write up

开启靶场&#xff0c;下载附件&#xff0c;解压后得到&#xff1a; 双击exe文件&#xff0c;出现弹窗&#xff1a; 问的是异或&#xff0c;写个python文件来计算结果&#xff1a; # 获取用户输入的两个整数 num1 int(input("Enter the first number: ")) num2 int…

云渲染主要是分布式(分机)渲染,如何使用blender云渲染呢?

云渲染主要是分布式&#xff08;分机&#xff09;渲染&#xff0c;比如一个镜头同时开20-100张3090显卡的机器渲染&#xff0c;就能同时渲染20-100帧&#xff0c;渲染不仅不占用自己电脑&#xff0c;效率也将增加几十上百倍&#xff01; blender使用教程如下&#xff1a; 第一…