原创

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-022021-032021-042021-052021-062021-072021-082021-092021-102021-112021-122022-012022-022022-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 + "毫秒";
     }

正文到此结束
本文目录