提供一个时间工具类 可以计算两个时间之间的天数 按时间给出是上午还是下午等等

提供一个时间工具类 可以计算两个时间之间的天数 按时间给出是上午还是下午等等


import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 时间处理工具类
 * 使用joda-time(DateTimeFormat,DateTimeFormatter)
 */
public class DateTimeUtil {

    public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final String TIME_FORMAT_1 = "HH:mm:ss";
    public static final String TIME_FORMAT_2 = "yyyy-MM-dd";
    public static final String TIME_FORMAT_3 = "yyyy/MM/dd";
    public static final String TIME_FORMAT_4 = "yyyy-MM";

    //将str转换成datetime
    public static Date strToDate(String dateTimeStr, String formartStr) {
        //传入格式并封装(创建一个格式化对象)
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formartStr);
        //将传进来的字符串封装为一个DateTime对象
        DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
        //返回date对象
        return dateTime.toDate();
    }

    //将datetime转换成str
    public static String dateToStr(Date date, String formatStr) {
        if (date == null) {
            return "";
        }
        DateTime dateTime = new DateTime(date);
        return dateTime.toString(formatStr);
    }


    //将str转换成datetime(标准化)
    public static Date strToDate(String dateTimeStr) {
        //传入格式并封装
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
        //将传进来的字符串封装为一个DateTime对象
        DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
        //返回date对象
        return dateTime.toDate();
    }

    //将datetime转换成str(标准化)
    public static String dateToStr(Date date) {
        if (date == null) {
            return "";
        }
        DateTime dateTime = new DateTime(date);
        return dateTime.toString(STANDARD_FORMAT);
    }


    /**
     * 通过两个日期字符串和格式,得到这两个日期之间的所有日期列表
     */
    public static List<Date> getDatesBetweenTwoDate(String dateStr1, String dateStr2, String format) {
        return getDatesBetweenTwoDate(strToDate(dateStr1, format), strToDate(dateStr2, format));
    }


    /**
     * 通过两个日期,得到这两个日期之间的所有日期列表
     */
    public static List<Date> getDatesBetweenTwoDate(Date beginDate, Date endDate) {
        switch (beginDate.compareTo(endDate)) {
            case 0:
            case 1:
                List<Date> list = new ArrayList<>();
                list.add(beginDate);
                return list;
        }

        List<Date> lDate = new ArrayList<Date>();
        lDate.add(beginDate);// 把开始时间加入集合
        Calendar cal = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        cal.setTime(beginDate);
        boolean bContinue = true;
        while (bContinue) {
            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
            cal.add(Calendar.DAY_OF_MONTH, 1);
            // 测试此日期是否在指定日期之后
            if (endDate.after(cal.getTime())) {
                lDate.add(cal.getTime());
            } else {
                break;
            }
        }
        lDate.add(endDate);// 把结束时间加入集合
        return lDate;
    }

    /**
     * 通过给的时间计算是上午还是下午
     * 返回:0是上午 1是下午
     */
    public static int noonType(Date date) {
        GregorianCalendar ca = new GregorianCalendar();
        ca.setTime(date);
        return ca.get(GregorianCalendar.AM_PM);
    }


    /**
     * 判断第一给时间字符串和(第二个时间字符串+分钟数)的大小
     * ex :HH:mm:ss 和 ( HH:mm:ss + minutes) 第一个大返回1 第一个小返回0
     */
    public static int compareTime(String timeStr1, String timeStr2, Integer minutes) {
        java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern(TIME_FORMAT_1);
        LocalTime localTime1 = LocalTime.parse(timeStr1, formatter);
        LocalTime localTime2 = LocalTime.parse(timeStr2, formatter);
        return localTime1.compareTo(localTime2.plusMinutes(minutes));
    }

    /**
     * 获取本月第一天
     * @return
     */
    public static String getCurrentMonthFirstDay() {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime firstDay = LocalDateTime.of(now.getYear(), now.getMonthValue(), 1, 0, 0);
        return firstDay.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }


    /**
     * 获取两个日期之间所有的日期集合
     */
    public static List<String> getSpanDateList(String startTime, String endTime) {
        List<Date> dateList = DateTimeUtil.getDatesBetweenTwoDate(startTime, endTime, DateTimeUtil.TIME_FORMAT_2);
        List<String> dateStrList = dateList.stream().map(date -> DateTimeUtil.dateToStr(date, DateTimeUtil.TIME_FORMAT_2)).collect(Collectors.toList());
        return dateStrList;
    }

    /**
     * 获取本月最后一天
     * @return
     */
    public static String getCurrentMonthLastDay() {

        LocalDateTime now = LocalDateTime.now();
        LocalDateTime nextMonthFirstDay = null;
        if(now.getMonthValue() < 12){
            nextMonthFirstDay = LocalDateTime.of(now.getYear(),now.getMonthValue()+1, 1, 0, 0);
        }else{
            nextMonthFirstDay = LocalDateTime.of(now.getYear()+1,1, 1, 0, 0);
        }
        LocalDateTime lastDay = nextMonthFirstDay.plusDays(-1);

        return lastDay.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值