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<String> getMonthBetweenDate(String startTime, String endTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();
        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<String> 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

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值