Java-日期-时间-LocalDateTime-hutool DateUtil-秒转成时分秒显示-格式化

时间:2025-02-16 13:11:30

 
#### 一、LocalDateTime 使用
 ```
 // 获得某天最大时间 2020-02-19 23:59:59
    public static Date getEndOfDay(Date date) {
        LocalDateTime localDateTime = ((()), ());
        LocalDateTime endOfDay = ();
        return ((()).toInstant());
    }

    // 获得某天最小时间 2020-02-17 00:00:00
    public static Date getStartOfDay(Date date) {
        LocalDateTime localDateTime = ((()), ());
        LocalDateTime startOfDay = ();
        return ((()).toInstant());
    }
    // 获得某月的第一天和最后1天,需要改造,入参传 月就行。
    public static void getStartAndEndOfDay() {
        LocalDateTime date1 = ();
        LocalDateTime firstday = (());
        LocalDateTime lastDay = (());
        ("firstday:" + firstday);
        ("lastDay:" + lastDay);
    }
 ```
#### 二、hutool DateUtil使用
 ```
    ;
    ()
    ()
 ```
    /**
     * 获取两个日期之间的所有月份 (年月)
     * /Czh3616x/article/details/127648376
     * 还有
     * 输入开始时间和结束时间,返回时间范围内中的所有日期列表
     * 输入开始时间和结束时间,返回时间范围内中的所有年份列表
     * @param startTime
     * @param endTime
     * @return:list
     */
    public static List<String> getMonthBetweenDate(String startTime, String endTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();
        try {
            // 转化成日期类型
            Date startDate = (startTime);
            Date endDate = (endTime);

            //用Calendar 进行日期比较判断
            Calendar calendar = ();
            while (()<=()){
                // 把日期添加到集合
                ((startDate));
                // 设置日期
                (startDate);
                //把日期增加一天
                (, 1);
                // 获取增加后的日期
                startDate=();
            }
        } catch (ParseException e) {
           ("获取日期间隔失败,startTime:{},endTime:{},异常:{}", startTime, endTime, e);
        }
        return list;
    }

    public static void main(String[] args) throws ParseException {
        String startStr = "2021-02";
        String endStr = "2022-03";
        List<String> list = getMonthBetweenDate(startStr, endStr);
        (list);
    }

    2021-02, 2021-03, 2021-04, 2021-05, 2021-06, 2021-07, 2021-08, 2021-09, 2021-10, 2021-11, 2021-12, 2022-01, 2022-02, 2022-03]

    import ;
    import ;
    import ;
    import ;
    
    //转成月度
    public static String convert2Month(String dateTime) {
        int length = ();
        if (length < 7) {
            throw new BizzException("dateTime参数非yyyy-MM或yyyy-MM-dd HH:mm:ss格式");
        }
        if (() > 7) {
            return (strToDate(dateTime), "yyyy-MM");
        }

        return dateTime;
    }

    //转成日
    public static String convert2Day(String dateTime) {
        int length = ();
        if (length < 10) {
            throw new BizzException("dateTime参数非yyyy-MM-dd或yyyy-MM-dd HH:mm:ss格式");
        }
        dateTime = (dateTime);
        if (() > 10) {
            return (strToDate(dateTime), "yyyy-MM-dd");
        }
        return dateTime;
    }
     /**
     * 字符串转换成日期
     *
     * @param str
     * @return date
     */
    public static Date strToDate(String str) {
        //DateFormatUtil 云笔记中的已经有的解析各种日期的工具
        str = (str);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = (str);
        } catch (ParseException e) {
            ();
        }
        return date;
    }
    
    获取当前季度的最后时间 到 秒
    public static String getCurrentQuarterEndDateTme() {
        //当天
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String endQuarterDay = (getQuarterEnd(new Date()).getTime());
        return endQuarterDay + " 23:59:59";
    }


    /**
     * /qq_14994863/article/details/120909628 2种方法
     *
     * @Description: 获取季度第一天【日期】
     * 1.根据给定日期计算当前季度的第一个月份
     * 2.设置日历的月份为当前季度的第一个月份
     * 3.最后设置日历月份天数为第一天即可
     *  用法见getCurrentQuarterEndDateTme()
     **/
    public static Calendar getQuarterStart(Date date) {
        Calendar startCalendar = ();
        (date);
        //get方法:获取给定日历属性的值,如 () 获取日历的月份
        //计算季度数:由于月份从0开始,即1月份的值为0,所以计算季度的第一个月份只需 月份 / 3 * 3
        (, (((int) ()) / 3) * 3);
        (Calendar.DAY_OF_MONTH, 1);
        return startCalendar;
    }

    /**
     * @Description: 获取季度最后一天【日期】
     *  用法见getCurrentQuarterEndDateTme()
     **/
    public static Calendar getQuarterEnd(Date date) { // 季度结束
        Calendar endCalendar = ();
        (date);
        //计算季度数:由于月份从0开始,即1月份的值为0,所以计算季度的第三个月份只需 月份 / 3 * 3 + 2
        (, (((int) ()) / 3) * 3 + 2);
        (Calendar.DAY_OF_MONTH, (Calendar.DAY_OF_MONTH));
        return endCalendar;
    }    
    
    
     /** 
     * /qq_23412557/article/details/123016739
     * 字符串的日期格式的计算
     * 时间会通过yyyy-MM-dd转成当天的0点
     * 入参支持 "2012-09-08 10:10:10","2012-09-15"
     * 日期如果填反了,会返回负值
     */
    public static int daysBetween(String smallDate, String bigDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = ();
        ((smallDate));
        long time1 = ();
        ((bigDate));
        long time2 = ();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);

        return ((between_days));
    }

#### 三、使用

```
package ;

import ;
import ;
import ;
import ;

import ;

/**
 * @Title:
 * @Description: f6汽车科技的日期时间处理工具类
 * @date 2015年5月7日 下午7:03:05
 */
public class DateTimeUtil {
    /**
     * @return String
     * @Title: addMonths
     * @Description: 通过当前时间及有效期计算截止日期, 日期加月
     * @author Alex
     * @date 2015年4月23日上午10:57:03
     */
    public static String addMonths(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DATE_FORMAT_PATTERN);
    }

    /**
     * 日期加天数
     *
     * @return
     * @author jermmy
     * 2015年5月7日19:09:59
     */
    public static String addDays(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return ("MM-dd");
    }

    public static Date addDateDays(Date date, Long day) {
        long time = (); // 得到指定日期的毫秒数
        day = day * 24 * 60 * 60 * 1000; // 要加上的天数转换成毫秒数
        time += day; // 相加得到新的毫秒数
        return new Date(time); // 将毫秒数转换成日期
    }

    /**
     * 获取日期的月和日字符串
     *
     * @return
     */
    public static String getDateSubString(Date date) {
        DateTime dateTime = new DateTime(date);
        return ("MM-dd");
    }

    /**
     * @return String
     * @Title: addHours
     * @Description: 日期加小时, 保留时分秒
     * @author Alex
     * @date 2015年7月7日下午2:01:27
     */
    public static String addHours(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DATE_FORMAT_PATTERN);
    }

    /**
     * @return String
     * @Title: addHour
     * @Description: 日期加小时, 保留时分
     * @author Alex
     * @date 2015年7月7日下午2:02:09
     */
    public static String addHour(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return ("yyyy-MM-dd HH:mm");

    }

    /**
     * @return String
     * @Title: addDay
     * @Description: 日期加天数, 格式化为年月日
     * @author Alex
     * @date 2015年7月14日下午1:35:07
     */
    public static String addDay(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DAY_FORMAT_PATTERN);
    }

    /**
     * @param date
     * @param validate
     * @return
     * @Description: 日期减天数, 格式化为年月日
     */
    public static String minusDays(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DAY_FORMAT_PATTERN);
    }

    /**
     * @return String
     * @Title: addDay
     * @Description: 日期加天数, 格式化为年月日
     * @author Alex
     * @date 2015年7月14日下午1:35:07
     */
    public static String addMonth(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DAY_FORMAT_PATTERN);
    }

    public static String minusDay(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (AppConstant.DEFAULT_DAY_FORMAT_PATTERN);
    }

    /**
     * 日期+分钟
     *
     * @param date
     * @param validate
     * @return
     */
    public static String addMinute(Date date, Integer validate) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return ("yyyy-MM-dd HH:mm");
    }


    /**
     * 比较2个日期相差分钟数
     *
     * @param date1
     * @param date2
     * @return
     */
    public static long getMinute(Date date1, Date date2) {
        DateTime dateTime1 = new DateTime(date1);
        DateTime dateTime2 = new DateTime(date2);
        return (dateTime2, dateTime1).getMinutes();
    }

    /**
     * 日期+分钟
     *
     * @param date
     * @param validate
     * @return
     */
    public static String addMinute(Date date, Integer validate, String fmt) {
        DateTime dateTime = new DateTime(date);
        dateTime = (validate);
        return (fmt);
    }

    public static String getCurrentMonthStartTime() {
        return new DateTime().dayOfMonth().withMinimumValue().hourOfDay().withMinimumValue().millisOfDay().withMinimumValue().toString(AppConstant.DEFAULT_DATE_FORMAT_PATTERN);
    }

    public static String getCurrentMonthEndTime() {
        return new DateTime().dayOfMonth().withMaximumValue().hourOfDay().withMaximumValue().millisOfDay().withMaximumValue().toString(AppConstant.DEFAULT_DATE_FORMAT_PATTERN);
    }

    /**
     * 比较日期的大小
     *
     * @param dateStr1
     * @param dateStr2
     */
    public static boolean compareDate(Date dateStr1, Date dateStr2) {
        DateTime dateTime1 = new DateTime(dateStr1);
        DateTime dateTime2 = new DateTime(dateStr2);
        return (dateTime2);
    }

    /**
     * String 转 Date
     */
    public static Date transformStringToDate(String dateStr, String formatStr) {
        DateTimeFormatter format = (formatStr);
        DateTime dateTime = (dateStr, format);
        return ();
    }

    /**
     * 计算两个date的天数差
     */
    public static long getBetweenDays(Date startDate, Date endDate) {
        long betweenDays = (() - ())/(1000*60*60*24);
        return betweenDays;
    }

    public static void main(String[] args) {
        String time = (new Date(), 30);
        ((new Date(), new Date(0)));
        (time);
        (getCurrentMonthStartTime());
        (getCurrentMonthEndTime());
    }

}

```

 ### 另外见《Java-DateFormatUtil-日期格式化-将任意时间格式转为标准时间格式-字符串转Date-SimpleDateFormat》
 
 ```
 //秒转成时分秒显示-秒数格式化
 private final static BigInteger bigInt3600 = new BigInteger("3600");
private final static BigInteger bigInt60 = new BigInteger("60");

   //对秒时间 + 1 操作,优化展示
    private static String second2Time(BigInteger second) {
        if (second == null || (new BigInteger("0"))<=0) {
            return "00:00";
        }
        long h = (bigInt3600).longValue();
        long m = ((bigInt3600)).divide(bigInt60).longValue();
        long s = (bigInt60).longValue();
        //如果展示到时分,对秒时间 + 1 操作,优化展示
        //如果展示到时分秒,这算逻辑就要去掉,并且上面判空的返回值改成   return "00:00:00"; 
        if (s > 0) {//超过1秒,分钟+1
            m += 1;
            if (m >= 60) {
                h += 1;
                m = 0;
            }
        }
        String str = "";
        str = (h < 10 ? ("0" + h) : h) + ":";
        str += (m < 10 ? ("0" + m) : m); //+ ":";
        // str += (s < 10 ? ("0" + s) : s);
        return str;
    }
    
    
     /**
     * 计算任务消费的时间
     * @param startTime
     * @return
     */
     public static String getCostTimeString(long startTime) {
    
        long endTime = ();
        long ms = endTime - startTime;
    
        long hour = ms / 1000 / 60 / 60;
        long min = ms / 1000 / 60 % 60;
        long sec = ms / 1000 % 60;
        long mi = ms % 1000;
        return hour + "时" + min + "分" + sec + "秒" + mi + "毫秒";
     }
 ```

- 个人网站:[]( "个人网站,微信技术交流:yanfahezuo") 
- 微信技术交流:yanfahezuo