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

 

#### 一、LocalDateTime 使用

 “`

 // 获得某天最大时间 2020-02-19 23:59:59

    public static Date getEndOfDay(Date date) {

        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());

        LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);

        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());

    }

    // 获得某天最小时间 2020-02-17 00:00:00

    public static Date getStartOfDay(Date date) {

        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());

        LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);

        return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());

    }

    // 获得某月的第一天和最后1天,需要改造,入参传 月就行。

    public static void getStartAndEndOfDay() {

        LocalDateTime date1 = LocalDateTime.now();

        LocalDateTime firstday = date1.with(TemporalAdjusters.firstDayOfMonth());

        LocalDateTime lastDay = date1.with(TemporalAdjusters.lastDayOfMonth());

        System.out.println(“firstday:” + firstday);

        System.out.println(“lastDay:” + lastDay);

    }

 “`

#### 二、hutool DateUtil使用

 “`

    cn.hutool.core.date.DateUtil;

    DateUtil.beginOfMonth()

    DateUtil.endOfMonth()

 “`

    /**

     * 获取两个日期之间的所有月份 (年月)

     * https://blog.csdn.net/Czh3616x/article/details/127648376

     * 还有

     * 输入开始时间和结束时间,返回时间范围内中的所有日期列表

     * 输入开始时间和结束时间,返回时间范围内中的所有年份列表

     * @param startTime

     * @param endTime

     * @return:list

     */

    public static List getMonthBetweenDate(String startTime, String endTime){

        SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM”);

        // 声明保存日期集合

        List list = new ArrayList();

        try {

            // 转化成日期类型

            Date startDate = sdf.parse(startTime);

            Date endDate = sdf.parse(endTime);

            //用Calendar 进行日期比较判断

            Calendar calendar = Calendar.getInstance();

            while (startDate.getTime()<=endDate.getTime()){

                // 把日期添加到集合

                list.add(sdf.format(startDate));

                // 设置日期

                calendar.setTime(startDate);

                //把日期增加一天

                calendar.add(Calendar.MONTH, 1);

                // 获取增加后的日期

                startDate=calendar.getTime();

            }

        } catch (ParseException e) {

           log.error(“获取日期间隔失败,startTime:{},endTime:{},异常:{}”, startTime, endTime, e);

        }

        return list;

    }

    public static void main(String[] args) throws ParseException {

        String startStr = “2021-02”;

        String endStr = “2022-03”;

        List list = getMonthBetweenDate(startStr, endStr);

        System.out.println(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 cn.hutool.core.date.DateUtil;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    

    //转成月度

    public static String convert2Month(String dateTime) {

        int length = dateTime.length();

        if (length < 7) {

            throw new BizzException(“dateTime参数非yyyy-MM或yyyy-MM-dd HH:mm:ss格式”);

        }

        if (dateTime.length() > 7) {

            return DateUtil.format(strToDate(dateTime), “yyyy-MM”);

        }

        return dateTime;

    }

    //转成日

    public static String convert2Day(String dateTime) {

        int length = dateTime.length();

        if (length < 10) {

            throw new BizzException(“dateTime参数非yyyy-MM-dd或yyyy-MM-dd HH:mm:ss格式”);

        }

        dateTime = DateFormatUtilNew.FormatDate(dateTime);

        if (dateTime.length() > 10) {

            return DateUtil.format(strToDate(dateTime), “yyyy-MM-dd”);

        }

        return dateTime;

    }

     /**

     * 字符串转换成日期

     *

     * @param str

     * @return date

     */

    public static Date strToDate(String str) {

        //DateFormatUtil 云笔记中的已经有的解析各种日期的工具

        str = DateFormatUtil.FormatDate(str);

        SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

        Date date = null;

        try {

            date = format.parse(str);

        } catch (ParseException e) {

            e.printStackTrace();

        }

        return date;

    }

    

    获取当前季度的最后时间 到 秒

    public static String getCurrentQuarterEndDateTme() {

        //当天

        SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);

        String endQuarterDay = sdf.format(getQuarterEnd(new Date()).getTime());

        return endQuarterDay + ” 23:59:59″;

    }

    /**

     * https://blog.csdn.net/qq_14994863/article/details/120909628 2种方法

     *

     * @Description: 获取季度第一天【日期】

     * 1.根据给定日期计算当前季度的第一个月份

     * 2.设置日历的月份为当前季度的第一个月份

     * 3.最后设置日历月份天数为第一天即可

     *  用法见getCurrentQuarterEndDateTme()

     **/

    public static Calendar getQuarterStart(Date date) {

        Calendar startCalendar = Calendar.getInstance();

        startCalendar.setTime(date);

        //get方法:获取给定日历属性的值,如 endCalendar.get(Calendar.MONTH) 获取日历的月份

        //计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第一个月份只需 月份 / 3 * 3

        startCalendar.set(Calendar.MONTH, (((int) startCalendar.get(Calendar.MONTH)) / 3) * 3);

        startCalendar.set(Calendar.DAY_OF_MONTH, 1);

        return startCalendar;

    }

    /**

     * @Description: 获取季度最后一天【日期】

     *  用法见getCurrentQuarterEndDateTme()

     **/

    public static Calendar getQuarterEnd(Date date) { // 季度结束

        Calendar endCalendar = Calendar.getInstance();

        endCalendar.setTime(date);

        //计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第三个月份只需 月份 / 3 * 3 + 2

        endCalendar.set(Calendar.MONTH, (((int) endCalendar.get(Calendar.MONTH)) / 3) * 3 + 2);

        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));

        return endCalendar;

    }    

    

    

     /** 

     * https://blog.csdn.net/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 = Calendar.getInstance();

        cal.setTime(sdf.parse(smallDate));

        long time1 = cal.getTimeInMillis();

        cal.setTime(sdf.parse(bigDate));

        long time2 = cal.getTimeInMillis();

        long between_days = (time2 – time1) / (1000 * 3600 * 24);

        return Integer.parseInt(String.valueOf(between_days));

    }

#### 三、joda.time使用

“`

package com.air.tqb.common;

import org.joda.time.DateTime;

import org.joda.time.Minutes;

import org.joda.time.format.DateTimeFormat;

import org.joda.time.format.DateTimeFormatter;

import java.util.Date;

/**

 * @Title: DateUtil.java

 * @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 = dateTime.plusMonths(validate);

        return dateTime.toString(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 = dateTime.plusDays(validate);

        return dateTime.toString(“MM-dd”);

    }

    public static Date addDateDays(Date date, Long day) {

        long time = date.getTime(); // 得到指定日期的毫秒数

        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 dateTime.toString(“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 = dateTime.plusHours(validate);

        return dateTime.toString(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 = dateTime.plusHours(validate);

        return dateTime.toString(“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 = dateTime.plusDays(validate);

        return dateTime.toString(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 = dateTime.minusDays(validate);

        return dateTime.toString(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 = dateTime.plusMonths(validate);

        return dateTime.toString(AppConstant.DEFAULT_DAY_FORMAT_PATTERN);

    }

    public static String minusDay(Date date, Integer validate) {

        DateTime dateTime = new DateTime(date);

        dateTime = dateTime.minusDays(validate);

        return dateTime.toString(AppConstant.DEFAULT_DAY_FORMAT_PATTERN);

    }

    /**

     * 日期+分钟

     *

     * @param date

     * @param validate

     * @return

     */

    public static String addMinute(Date date, Integer validate) {

        DateTime dateTime = new DateTime(date);

        dateTime = dateTime.plusMinutes(validate);

        return dateTime.toString(“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 Minutes.minutesBetween(dateTime2, dateTime1).getMinutes();

    }

    /**

     * 日期+分钟

     *

     * @param date

     * @param validate

     * @return

     */

    public static String addMinute(Date date, Integer validate, String fmt) {

        DateTime dateTime = new DateTime(date);

        dateTime = dateTime.plusMinutes(validate);

        return dateTime.toString(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 dateTime1.isAfter(dateTime2);

    }

    /**

     * String 转 Date

     */

    public static Date transformStringToDate(String dateStr, String formatStr) {

        DateTimeFormatter format = DateTimeFormat.forPattern(formatStr);

        DateTime dateTime = DateTime.parse(dateStr, format);

        return dateTime.toDate();

    }

    /**

     * 计算两个date的天数差

     */

    public static long getBetweenDays(Date startDate, Date endDate) {

        long betweenDays = (startDate.getTime() – endDate.getTime())/(1000*60*60*24);

        return betweenDays;

    }

    public static void main(String[] args) {

        String time = DateTimeUtil.addMinute(new Date(), 30);

        System.out.println(DateTimeUtil.getMinute(new Date(), new Date(0)));

        System.out.println(time);

        System.out.println(getCurrentMonthStartTime());

        System.out.println(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 || second.compareTo(new BigInteger(“0”))<=0) {

            return “00:00”;

        }

        long h = second.divide(bigInt3600).longValue();

        long m = (second.mod(bigInt3600)).divide(bigInt60).longValue();

        long s = second.mod(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 = System.currentTimeMillis();

        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 + “毫秒”;

     }

 “`

– 个人网站:[http://www.jiangjiesheng.cn](http://www.jiangjiesheng.cn “个人网站,微信技术交流:yanfahezuo”) 

– 微信技术交流:yanfahezuo

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/99a4c04214.html