Java开发中常用日期工具(整合版)

CAS使用账号密码实现单点登陆 CAS使用账号密码实现单点登陆CAS单点登陆框架项目需求实现思路1、使用用户名密码获取TGT2、根据TGT和Service获取ST3、使用ST访问目标资源Java代码实现 CAS单点登陆框架 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法 官方网站 https://www.apereo.org/projects/cas 这里不详细介绍CAS的单点登陆原理,感兴趣的同学可以自己去研究一下,这里仅就项目中遇到的问题进行记录 项目需求 我们的系统通过单点登陆跳转到 阅读详情

开发中经常用到的日期工具类整合

package com.etouch.utils;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


/**
 * @author fei
 * @date 2020-06-01 11:48:29
 * @description 日期工具类
 */
public class DateUtil {

    private static Logger log = LoggerFactory.getLogger(DateUtil.class);

    /**
     * @author fei
     * @date 2020-06-01 11:38:18
     * @description 获取时间戳
     */
    public static String getInterfaceCurrentTimestamp() {
        String time_stamp = "";
        try {
            time_stamp = DateUtil.getStringFromDate(new Date(), "yyyyMMddHHmmss");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return time_stamp;
    }

    /**
     * @author fei
     * @date 2020-06-01 11:38:46
     * @description 获取当前时间
     */
    public static Timestamp getCurrentTimestamp() {
        Timestamp t = null;
        try {
            t = date2TimeStamp(getCurrentDate());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

    /**
     * @author fei
     * @date 2020-06-01 13:56:56
     * @description 获取当前时间
     */
    public static Date getCurrentDate() {
        Date date = new Date();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            date = ((Date) sdf.parseObject(sdf.format(new Date())));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * @author fei
     * @date 2020-06-01 13:57:26
     * @description 获取当前时间 字符串形式 格式为 yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentStringDate() {
        return getStringFromDate(getCurrentDate());
    }

    /**
     * @author fei
     * @date 2020-06-01 13:24:19
     * @description 默认格式化为yyyy-MM-dd HH:mm:ss
     */
    public static String getStringFromDate(Date date) {
        return format(date, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:27:26
     * @description 将日期字符串转化为格式化字符串
     */
    public static String getStringFromDate(String date) {
        if (date == null) {
            return "";
        }
        Date d = getDateFromString(date, "yyyy-MM-dd HH:mm:ss");
        return format(d, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:25:35
     * @description 格式化为指定的样式
     */
    public static String getStringFromDate(Date date, String format) {
        return format(date, format);
    }

    /**
     * 格式化输出日期
     *
     * @param date   日期
     * @param format 格式
     * @return 返回字符型日期
     * @author fei
     * @date 2020-06-01 13:25:35
     */
    public static String format(Date date, String format) {
        String result = "";
        try {
            if (date != null) {
                SimpleDateFormat df = new SimpleDateFormat(format);
                result = df.format(date);
            }
        } catch (Exception e) {
        }
        return result;
    }

    /**
     * @author fei
     * @date 2020-06-01 13:30:01
     * @description 将String 转为date 默认String格式为yyyy-MM-dd HH:mm:ss
     */
    public static Date getDatetimeFromString(String dateStr) {
        return getDateFromString(dateStr, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:31:11
     * @description 将String 转为date 默认String格式为HH:mm
     */
    public static Date getTimeFromString(String dateStr) {
        return getDateFromString(dateStr, "HH:mm");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:31:05
     * @description 将String 转为date 默认String格式为yyyy-MM-dd
     */
    public static Date getDateFromString(String dateStr) {
        return getDateFromString(dateStr, "yyyy-MM-dd");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:32:24
     * @description 将String 转为date 默认String格式为yyyy-MM-dd
     */
    public static Date getDateTimeFromString(String dateStr) {
        return getDateFromString(dateStr, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * @author fei
     * @date 2020-06-01 13:32:51
     * @description
     */
    public static Date strToDate(String dateTime, Date curDate) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        dateTime = sdf.format(curDate) + " " + dateTime;
        Date date = null;
        if (dateTime != null && !dateTime.trim().isEmpty()) {
            try {
                date = simpleDateFormat.parse(dateTime);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return date;
    }

    /**
     * @author fei
     * @date 2020-06-01 13:58:18
     * @description 自定义格式, 自定义日期字符
     */
    public static Date getDateFromString(String dateStr, String format) {
        if (StringUtils.isBlank(dateStr)) {
            return null;
        }
        Date date = new Date();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;

    }

    /**
     * @author fei
     * @date 2020-06-01 13:34:52
     * @description 给指定日期加上 n个年月日时分秒
     */
    public static Date addDate(Date date, int year, int month, int day, int hour, int minute, int second) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(c.YEAR, year);
        c.add(c.MONTH, month);
        c.add(c.DAY_OF_MONTH, day);
        c.add(c.HOUR, hour);
        c.add(c.MINUTE, minute);
        c.add(c.SECOND, second);
        Date temp_date = c.getTime();
        return temp_date;
    }

    /**
     * @param date 指定日期
     * @return Timestamp
     * @author fei
     * @date 2020-06-01 13:36:36
     * @description date 转timestamp
     */
    public static Timestamp date2TimeStamp(Date date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Timestamp ts = new Timestamp(((Date) sdf.parseObject(sdf.format(date))).getTime());
        return ts;
    }
    
    /**
     * @param date1 日期1
     * @param date2 日期2
     * @return int
     * @author fei
     * @date 2020-06-01 13:37:53
     * @description 得到两个时间之间的天数,字符串格式的,date2-date1
     */
    public static int getDaysBetween2Date(String date1, String date2) throws ParseException {
        int days = 0;
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        long to = df.parse(date2).getTime();
        long from = df.parse(date1).getTime();
        days = (int) ((to - from) / (1000 * 60 * 60 * 24));
        return days;
    }

    /**
     * @param n 小时
     * @return Date
     * @author fei
     * @date 2020-06-01 13:38:34
     * @description 获取指定时间的前n个小时时间
     */
    public static Date getBefore(Date date, Integer n) {
        Calendar calendar = Calendar.getInstance();
        /* HOUR_OF_DAY 指示一天中的小时 */
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - n);
        return calendar.getTime();
    }

    /**
     * 获取当前时间的后几个小时
     *
     * @param n
     * @return
     */
    public static Date getAfter(Date date, Integer n) {
        Calendar calendar = Calendar.getInstance();
        /* HOUR_OF_DAY 指示一天中的小时 */
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + n);
        //或者采用这种
//        calendar.add(Calendar.HOUR,n);
        return calendar.getTime();
    }

    /**
     * 得到两个时间之间的天数,日期格式的
     * date2-date1
     *
     * @param date1 日期1
     * @param date2 日期2
     * @return int 相差的日期
     * @throws ParseException
     */
    public static int getDaysBetween2Date(Date date1, Date date2) throws ParseException {
        String d1 = DateUtil.getStringFromDate(date1, "yyyy-MM-dd");
        String d2 = DateUtil.getStringFromDate(date2, "yyyy-MM-dd");
        return getDaysBetween2Date(d1, d2);
    }

    /**
     * 得到两个时间之间的小时,日期格式的 date2-date1
     *
     * @param date1 日期1
     * @param date2 日期2
     * @return double 小时数
     * @throws ParseException
     */
    public static double getHoursBetween2Date(Date date1, Date date2) {
        double hours = 0;
        hours = (double) (Double.parseDouble((date2.getTime() - date1.getTime()) + "") / (1000 * 60 * 60));
        return hours;
    }

    /**
     * @param date1 日期1
     * @param date2 日期2
     * @return int
     * @throws ParseException
     * @author fei
     * @date 2020-06-01 14:02:05
     * @description 得到两个时间之间的分,日期格式的 date2-date1
     */
    public static int getMinutesBetween2Date(Date date1, Date date2) throws ParseException {
        int minutes = 0;
        if (date2.getTime() < date1.getTime()) {
            return 0;
        }
        minutes = (int) ((date2.getTime() - date1.getTime()) / (1000 * 60));
        return minutes;
    }

    /**
     * @param date 指定日期
     * @return int 获取指定日期的年份
     * @author fei
     * @date 2020-06-01 11:41:16
     * @description 获取年份
     */
    public static int getYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }

    /**
     * @param date 指定日期
     * @return int 月份
     * @author fei
     * @date 2020-06-01 11:42:09
     * @description 获取月份
     */
    public static int getMonth(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH) + 1;//calendar获取到的月份少一个月, 所以这里加1
    }

    /**
     * @param date 传递的日期
     * @return int 指定日期的日份
     * @author fei
     * @date 2020-06-01 11:43:21
     * @description 获取指定日期的日份
     */
    public static int getDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * @author fei
     * @date 2020-06-01 11:44:30
     * @description 返回指定日期的对应小时
     */
    public static int getHour(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 返回分钟
     *
     * @param date 指定的日期 日期
     * @return 返回分钟
     * @author fei
     */
    public static int getMinute(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MINUTE);
    }

    /**
     * 返回秒钟
     *
     * @param date 指定的日期 日期
     * @return 返回秒钟
     * @author fei
     */
    public static int getSecond(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.SECOND);
    }

    /**
     * 返回毫秒
     *
     * @param date 指定的日期 日期
     * @return 返回毫秒
     * @author fei
     */
    public static long getMillis(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.getTimeInMillis();
    }


    /**
     * @param gc
     * @return java.util.Calendar
     * @Description: 获取月份的最后一天
     * @author fei
     * @date 2016-5-4
     */
    public static synchronized Calendar getLastDayOfMonth(Calendar gc) {
        /**
         * 详细设计:
         * 1.如果date在1月,则为31日
         * 2.如果date在2月,则为28日
         * 3.如果date在3月,则为31日
         * 4.如果date在4月,则为30日
         * 5.如果date在5月,则为31日
         * 6.如果date在6月,则为30日
         * 7.如果date在7月,则为31日
         * 8.如果date在8月,则为31日
         * 9.如果date在9月,则为30日
         * 10.如果date在10月,则为31日
         * 11.如果date在11月,则为30日
         * 12.如果date在12月,则为31日
         * 1.如果date在闰年的2月,则为29日
         */
        switch (gc.get(Calendar.MONTH)) {
            case 0:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 1:
                gc.set(Calendar.DAY_OF_MONTH, 28);
                break;
            case 2:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 3:
                gc.set(Calendar.DAY_OF_MONTH, 30);
                break;
            case 4:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 5:
                gc.set(Calendar.DAY_OF_MONTH, 30);
                break;
            case 6:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 7:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 8:
                gc.set(Calendar.DAY_OF_MONTH, 30);
                break;
            case 9:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
            case 10:
                gc.set(Calendar.DAY_OF_MONTH, 30);
                break;
            case 11:
                gc.set(Calendar.DAY_OF_MONTH, 31);
                break;
        }
        //检查闰年
        if ((gc.get(Calendar.MONTH) == Calendar.FEBRUARY)
                && (isLeapYear(gc.get(Calendar.YEAR)))) {
            gc.set(Calendar.DAY_OF_MONTH, 29);
        }
        return gc;
    }

    /**
     * @param date 指定的日期 指定日期。
     * @return 指定日期的所处月份的第一天
     * @author fei
     * @date 2020-06-01 14:04:12
     * @description 取得指定日期的所处月份的第一天
     */
    public static synchronized Date getFirstDayOfMonth(Date date) {
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        gc.set(Calendar.DAY_OF_MONTH, 1);
        return gc.getTime();
    }
    
    /**
     * 将日期对象转换成为指定ORA日期、时间格式的字符串形式。如果日期对象为空,返回 一个空字符串对象,而不是一个空对象。
     *
     * @param theDate 将要转换为字符串的日期对象。
     * @param hasTime 如果返回的字符串带时间则为true
     * @return 转换的结果
     * @author fei
     */
    public static synchronized String toOraString(Date theDate, boolean hasTime) {
        /**
         * 详细设计:
         * 1.如果有时间,则设置格式为getOraDateTimeFormat()的返回值
         * 2.否则设置格式为getOraDateFormat()的返回值
         * 3.调用toString(Date theDate, DateFormat
         * theDateFormat)
         */
        DateFormat theFormat;
        if (hasTime) {
            theFormat = getOraDateTimeFormat();
        } else {
            theFormat = getOraDateFormat();
        }
        return toString(theDate, theFormat);
    }

    /**
     * 将日期对象转换成为指定日期、时间格式的字符串形式。如果日期对象为空,返回 一个空字符串对象,而不是一个空对象。
     *
     * @param theDate 将要转换为字符串的日期对象。
     * @param hasTime 如果返回的字符串带时间则为true
     * @return 转换的结果
     * @author fei
     */
    public static synchronized String toString(Date theDate, boolean hasTime) {
        /**
         * 详细设计:
         * 1.如果有时间,则设置格式为getDateTimeFormat的返回值
         * 2.否则设置格式为getDateFormat的返回值
         * 3.调用toString(Date theDate, DateFormat theDateFormat)
         */
        DateFormat theFormat;
        if (hasTime) {
            theFormat = getDateTimeFormat();
        } else {
            theFormat = getDateFormat();
        }
        return toString(theDate, theFormat);
    }

    /**
     * 标准日期格式
     */
    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
    /**
     * 标准时间格式
     */
    public static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("MM/dd/yyyy HH:mm");
    /**
     * 带时分秒的标准时间格式
     */
    public static final SimpleDateFormat DATE_TIME_EXTENDED_FORMAT = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    /**
     * ORA标准日期格式
     */
    private static final SimpleDateFormat ORA_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
    /**
     * ORA标准时间格式
     */
    public static final SimpleDateFormat ORA_DATE_TIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmm");
    /**
     * 带时分秒的ORA标准时间格式
     */
    public static final SimpleDateFormat ORA_DATE_TIME_EXTENDED_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");

    /**
     * 创建一个标准日期格式的克隆
     *
     * @return 标准日期格式的克隆
     */
    public static synchronized DateFormat getDateFormat() {
        /**
         * 详细设计: 1.返回DATE_FORMAT
         */
        SimpleDateFormat theDateFormat = (SimpleDateFormat)
                DATE_FORMAT.clone();
        theDateFormat.setLenient(false);
        return theDateFormat;
    }

    /**
     * 创建一个标准时间格式的克隆
     *
     * @return 标准时间格式的克隆
     */
    public static synchronized DateFormat getDateTimeFormat() {
        /**
         * 详细设计: 1.返回DATE_TIME_FORMAT
         */
        SimpleDateFormat theDateTimeFormat = (SimpleDateFormat) DATE_TIME_FORMAT
                .clone();
        theDateTimeFormat.setLenient(false);
        return theDateTimeFormat;
    }

    /**
     * 创建一个标准ORA日期格式的克隆
     *
     * @return 标准ORA日期格式的克隆
     */
    public static synchronized DateFormat getOraDateFormat() {
        /**
         * 详细设计: 1.返回ORA_DATE_FORMAT
         */
        SimpleDateFormat theDateFormat = (SimpleDateFormat) ORA_DATE_FORMAT
                .clone();
        theDateFormat.setLenient(false);
        return theDateFormat;
    }

    /**
     * 创建一个标准ORA时间格式的克隆
     *
     * @return 标准ORA时间格式的克隆
     */
    public static synchronized DateFormat getOraDateTimeFormat() {
        /**
         * 详细设计: 1.返回ORA_DATE_TIME_FORMAT
         */
        SimpleDateFormat theDateTimeFormat = (SimpleDateFormat)
                ORA_DATE_TIME_FORMAT.clone();
        theDateTimeFormat.setLenient(false);
        return theDateTimeFormat;
    }

    /**
     * 将一个日期对象转换成为指定日期、时间格式的字符串。 如果日期对象为空,返回一个空字符串,而不是一个空对象。
     *
     * @param theDate       要转换的日期对象
     * @param theDateFormat 返回的日期字符串的格式
     * @return 转换结果
     */
    public static synchronized String toString(Date theDate,
                                               DateFormat theDateFormat) {
        /**
         * 详细设计:
         * 1.theDate为空,则返回""
         * 2.否则使用theDateFormat格式化
         */
        if (theDate == null)
            return "";
        return theDateFormat.format(theDate);
    }

  	/**
  	 * @author fei
  	 * @date 2020-06-01 14:15:48 
  	 * @description 判断当前日期是否是闰年
  	*/
    public static synchronized boolean isLeapYear() {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        return isLeapYear(year);
    }

    /**
     * 计算指定年份是否是闰年
     *
     * @param year
     * @return
     */
    public static synchronized boolean isLeapYear(int year) {
        /**
         * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
         * 3.能被4整除同时能被100整除则不是闰年
         */
        if ((year % 400) == 0)
            return true;
        else if ((year % 4) == 0) {
            if ((year % 100) == 0)
                return false;
            else return true;
        } else return false;
    }

    /**
     * 判断指定日期的年份是否是闰年
     *
     * @param date 指定的日期 指定日期。
     * @return 是否闰年
     */
    public static synchronized boolean isLeapYear(Date date) {
        /**
         * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
         * 3.能被4整除同时能被100整除则不是闰年
         */
        // int year = date.getYear();
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        int year = gc.get(Calendar.YEAR);
        return isLeapYear(year);
    }

    /**
     * 判断指定时间是否是闰年
     *
     * @param gc
     * @return
     */
    public static synchronized boolean isLeapYear(Calendar gc) {
        /**
         * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
         * 3.能被4整除同时能被100整除则不是闰年
         */
        int year = gc.get(Calendar.YEAR);
        return isLeapYear(year);
    }

    /**
     * 取得指定日期的下一个月
     *
     * @param date 指定的日期 指定日期。
     * @return 指定日期的下一个月
     */
    public static synchronized Date getNextMonth(Date date) {
        /**
         * 详细设计:
         * 1.指定日期的月份加1
         */
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        gc.add(Calendar.MONTH, 1);
        return gc.getTime();
    }
    
    /**
     * @param date 指定日期
     * @author fei
     * @date 2020-06-01 14:10:43
     * @description 取得指定日期的下一天
     */
    public static synchronized Date getNextDay(Date date) {
        /**
         * 详细设计: 1.指定日期加1天
         */
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        gc.add(Calendar.DATE, 1);
        return gc.getTime();
    }
    
    /**
     * @author fei
     * @date 2020-06-01 14:10:22
     * @description 指定日期的下一个星期
     */
    public static synchronized Date getNextWeek(Date date) {
        /**
         * 详细设计:
         * 1.指定日期加7天
         */
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        gc.add(Calendar.DATE, 7);
        return gc.getTime();
    }
    

    /**
     * @author fei
     * @date 2020-06-01 14:09:28
     * @description 比较两个字符串时间大小,带时分秒的,date2大于date1返回true
     */
    public static synchronized boolean compare2Date(String date1, String date2) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(date1);
        Date d2 = sdf.parse(date2);

        if (d2.getTime() - d1.getTime() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @author fei
     * @date 2020-06-01 14:08:56
     * @description 比较两个时间大小,带时分秒的,date2大于date1返回true
     */
    public static synchronized boolean compare2Date(Date date1, Date date2) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = sdf.parse(sdf.format(date1));
        Date d2 = sdf.parse(sdf.format(date2));

        if (d2.getTime() - d1.getTime() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @author fei
     * @date 2020-06-01 14:07:48
     * @description 比较两个时间字符串的大小,不带时分秒的,date2大于date1返回true
     */
    public static synchronized boolean compare2DateNoHMS(String date1, String date2) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = sdf.parse(date1);
        Date d2 = sdf.parse(date2);

        if (d2.getTime() - d1.getTime() > 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * @author fei
     * @date 2020-06-01 14:07:06
     * @description 比较两个时间大小,不带时分秒的,date2大于date1返回true
     */
    public static synchronized boolean compare2DateNoHMS(Date date1, Date date2) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = sdf.parse(sdf.format(date1));
        Date d2 = sdf.parse(sdf.format(date2));
        if (d2.getTime() - d1.getTime() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 取得指定日期的加n天(n可为负数)
     *
     * @param date 指定日期。
     * @return 指定日期的加n天
     * @author fei
     */
    public static synchronized Date getOtherDay(Date date, int n) {
        GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
        gc.setTime(date);
        gc.add(Calendar.DATE, n);
        return gc.getTime();
    }
    
    /**
     * @author fei
     * @date 2020-06-01 11:49:54
     * @description 获取指定时间是星期几
     */
    public static int getWeekOfDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w <= 0)
            w = 7;
        return w;
    }

    public static String getUpWeekOfDate(Date date) {
        int i = getWeekOfDate(date);
        switch (i) {
            case 1:
                return "一";
            case 2:
                return "二";
            case 3:
                return "三";
            case 4:
                return "四";
            case 5:
                return "五";
            case 6:
                return "六";
            case 7:
                return "七";
            default:
                return "error";
        }
    }

    /**
     * @param createDate 指定的日期
     * @return String 时分秒
     * @author fei
     * @date 2020-06-01 13:52:40
     * @description 获取指定日期的时分秒
     */
    public static String getTimeAllFromString(Date createDate) throws ParseException {
        SimpleDateFormat sd = new SimpleDateFormat("HH:mm:ss");
        return sd.format(createDate);
    }
}

获取指定日期几天后的时间
/**
     * @author fei
     * @date 2020-06-01 10:46:59
     * @description 获取几天后的时间
    */
    public static Date getDateAfter(Date date,Integer day) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.set(Calendar.DATE, now.get(Calendar.DATE) + day);//+后 -前
        return now.getTime();
    }
Java日期选择工具设计及实现 本文还有配套的精品资源,点击获取 简介:本压缩包"Java_Date.rar"提供了一个实用的Java日期选择工具,特别适用于需要用户进行日期输入或选择的场景。工具由日历表格面板、控制条类、限定选择功能和颜色配置等核心组件构成,支持定制化和集成到用户界面中。通过对组件的深入了解和应用,开发者能够学习如何构建更加丰富和专业的日期选择功能。 1. Java日期处理需求... 阅读详情

相关推荐

从零搭建:基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台

本文详细介绍了如何从零搭建基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台。通过环境准备、模型部署、接口配置及联合仿真等步骤,帮助用户快速掌握飞行器仿真的核心技术,实现高效的三维可视化与实时数据交互。

weixin_29100399的博客 517

Java中时间日期工具类的使用

java.util.Date类 表示特定的瞬间,精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小 时、分、秒、年。:从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。:将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

fly的博客 1572

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5053

【JAVA时间工具类大全(珍藏)】

常用变量相关方法。

qq_42331569的博客 4376

解决WSL2网络隔离:Ubuntu子系统共享Windows代理的3种方法

本文详细解析了WSL2的网络隔离特性,并提供了三种在Ubuntu子系统中共享Windows代理的实用方法:环境变量法、配置文件法和系统服务法。通过具体代码示例和方案对比,帮助开发者快速解决WSL2网络访问问题,实现一键设置代理,提升开发效率。

weixin_29295541的博客 450

CANoe实战:手把手教你用J1939.dbc发送超8字节长帧报文(附完整CAPL代码)

本文详细解析了使用CANoe和J1939.dbc实现超8字节长帧报文的分包发送技术,提供完整的CAPL代码实现与优化策略。内容涵盖J1939.dbc配置、分包发送模块设计、接收端处理逻辑,并与ISO 15765-2协议进行深度对比,帮助开发者构建高效可靠的商用车通信解决方案。

weixin_29169899的博客 392

JAVA 日期工具类(全面,代码可以直接使用)

java 时间工具类,全面。

bug_love的博客 837

材料力学小白必看:纯弯曲正应力计算全解析(附实例演示)

本文详细解析了材料力学中纯弯曲正应力的计算原理与工程应用,通过实例演示帮助初学者掌握关键公式和计算流程。内容涵盖纯弯曲的基本假设、正应力分布规律、截面特性计算,以及现代工具如Excel、ANSYS和Python在应力分析中的应用,特别适合材料力学小白系统学习。

sea99的博客 1231

Java中时间工具详解:java.time包的应用

引言时间在软件开发中是一个至关重要的概念,而Java自从引入java.time包后,提供了更加强大和灵活的时间处理工具。本文将深入介绍java.time包中的一些常用时间工具,帮助你更好地处理日期和时间的操作。

qq_28068311的博客 801

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 327

Java日期工具类LocalDateTime

压轴的来了,个人感觉LocalDateTime是使用频率最高的工具类,所以本篇像文章详细研究说明一下🧐。Java8新特性日期工具类的梳理到此结束,欢迎大家补充说明😉。👍,那么本篇文章就算是一个整合、进阶吧😎。

Death Note 1989

超详细的Burp Suite安装使用

‌Burp Suite是一个强大的Web应用安全测试工具,适用于网络安全专业人士进行自动化网络应用程序的安全测试。‌ 它提供了在Windows和Kali Linux上安装和激活Burp Suite Professional的简便步骤,帮助用户快速集成并启用强大的网络扫描和渗透测试功能。Burp Suite的特点包括易于安装、良好的兼容性、内置的自动化工具、优秀的用户体验以及详细的教程,使得无论是安全领域的新手还是经验丰富的专家,都能轻松上手并高效地进行安全测试。此外,Burp Suite还支持扩展功能的使用

Dreams°的博客 2640

java日期格式化比较好用工具类整合

在我们日常开发中必然会用到Date这个类,所以对于日期的格式化都有自己的理解 ,下面我分享一下我常用的DateUtils 许多你细化的方法和技巧。 日期格式化的格式有哪些 public static final String FMT_YM = "yyyyMM"; public static final String FMT_Y_M = "yyyy-MM"; public s...

成熟的小孩的博客 1602

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java常用工具类

在Java和Spring Boot项目开发中,常用的公用工具类有以下几种类型:1. 字符串处理工具类:包含常见的字符串操作,如字符串拼接、分割、替换、转换大小写等。2. 时间日期工具类:提供日期的格式化、解析、计算、比较等功能,方便处理日期时间相关操作。3. 文件操作工具类:提供文件的创建、复制、删除、移动、重命名等操作,以及读取、写入文件内容的方法。4. 数据校验工具类:包含常见的数据校验方法,如判断是否为空、是否为数字、是否为邮箱等。

weixin_47425074的博客 3936

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java常用的日期工具类

以前经常被日期搞的头昏脑涨,今天就用了一个下午的时间好好的把工具类整理了一遍,几乎涵盖了所有能用到场景。并且还模仿新浪微博实现了时间戳的显示。这个工具类主要是Date类和Calendar类的使用。时间的原因今天不做注解了。...

apple_51426592的博客 1127

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 编程进阶实操与工具集整合实战指南及常用工具整合解析

我将通过介绍进阶实操的关键知识点,如并发编程、性能优化等,结合Hutool、Postman等工具集的整合应用,为你呈现从理论到实践的Java学习路径。

sss191s的博客 1127

资源整合:Java 日期和时间转换工具

该工具类用于字符串和日期之间的互相转换,也可用于格式化时间 import org.springframework.util.StringUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 日期转换工具类 * 时间转换工具类 * * @author LIFULIN * @className Da

李福霖的博客 315

Java入门( 日期类与 BigDecimal 工具类 )

本文详细解析Java开发中日期时间处理和高精度数值运算的核心工具类。日期时间处理方面,推荐使用Java8引入的LocalDateTime替代过时的Date类,其具备线程安全、无偏移等优势,支持创建、解析、字段获取、运算调整等操作。高精度运算方面,BigDecimal类能有效避免double/float的精度丢失问题,需注意使用字符串构造方法创建对象,除法运算必须指定精度和舍入模式。两者均为不可变类,天生线程安全,是提升代码健壮性的必备工具。掌握这些工具类的正确用法能规避开发中的常见问题,提高代码质量。

nplplus的博客 8468

【Java】Java 常用核心类篇 —— 时间-日期API(下)

不同的日期时间类(如 LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime 和 Instant)都提供了 parse 方法用于时态数据解析。可以使用预定义的格式(如 ISO_LOCAL_DATE、ISO_LOCAL_TIME 等)或自定义的 DateTimeFormatter 来解析字符串。在实际应用中,要对可能出现的 DateTimeParseException 异常进行处理,以确保程序的健壮性。

m0_72516377的博客 855

Java工具集-日期(DateUtils)

简单工具类 写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦 网上好了一些工具类例如commom.lang3或者hutool或者Jodd这样的开源工具,但是 发现他们之中虽然设计不错,但是如果我想要使用,就必须要引入依赖并且去维护依赖,有些 甚至会有存在版本编译不通过问题,故此想要写作一个每个类都可以作为独立工具类使用 每个使用者只需要复制该类,到任何项目当中都可以使用...

逍遥云恋 1270

Java Date类型格式化,不同日期格式转换,获取N天后的日期,CommonUtil工具

文章目录Date类型格式化为字符串不同日期格式的字符串之间的转换获取N天后的日期 Date类型格式化为字符串 java 日期格式化-- SimpleDateFormat 的使用。字符串转日期,日期转字符串 不同日期格式的字符串之间的转换 //日期字符串 各种格式之间转换 , 如: 20200101 转换 2020-01-01 2020年01月01日等 public static String dateStrFormat(String str,String srcFormat,String

技术改变世界 2347

Java8日期处理常用API

Java8日期处理常用API 参考网址: https://mp.weixin.qq.com/s/wgLCEhAonXreQ7Ge69nZPg Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。 Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。 新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。 **

java技术博客 380

Java 8 日期处理的工具类

Java 8 日期处理的工具类 Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。 Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。 新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。 示例1...

piaoyunlive的博客 375

1.Java中关于日期时间API的使用整合 - java.util包 和 java.text包

如果要用到关于日期时间API的话,这些文章应该能解决部分使用问题了。 单纯想到汉斯季默作曲的Time了,然后封面就搞了这个(乐

codeLearnerEternally的博客 1043

2.Java中关于日期时间API的使用整合 - java.time包

如果要用到关于日期时间API的话,这些文章应该能解决部分使用问题了。 单纯想到汉斯季默作曲的Time了,然后封面就搞了这个(乐

codeLearnerEternally的博客 1365
上一篇: 阿里云存储的视频大小和图片大小进行尺寸截取
下一篇: 开发常用命令 , linux常用命令大全
意田天
博客等级 码龄7年 41粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意田天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值