基于joda:日期时间工具类

Joda的Maven坐标

如果使用JDK1.8默认已经集成了Joda

 <!-- 时间操作组件 -->
<dependency>
   <groupId>joda-time</groupId>
   <artifactId>joda-time</artifactId>
   <version>2.5</version>
</dependency>
<!-- 时间toLocalDateTime -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.1.2</version>
</dependency>

基于joda封装的--日期时间工具类(更新中)

 // ++++++++【格式转换】+++++++++
  1.将 String 转为 date
  2.日期字符串格式化输出
  3.Date类型日期转字符串格式化输出
  4.获取当前指定格式的系统时间
 
  // ++++++++【日期加减】+++++++++
  1.增加天数后的Date日期
  2.减少天数后的日期
  3.增加月数后的日期
  4.减少月数后的日期
  5.减少年数后的日期
 
  // ++++++++【日期间隔】+++++++++
  1.和当前系统时间相隔的分钟数
  2.获取start到end的时间间隔
 
  // ++++++++【工作日/节假日/周末判断】+++++++++
  1.判断是否为交易日/工作日
  2.判断是否是周末
  3.判断是否为国家法定节假日
  4.判断是否为国家调整后的工作日
  5.判断目标时间是否在区间内
  6.判断两个日期(一个Date类型一个String类型)是否在同一天
 
  // ++++++++【查看月份、年份,星期】+++++++++
  1.根据日期<Date>获得当前星期几
  2.根据日期<String>获得【星期】
  3.根据日期<String>获得【月份】
  4.根据日期<String>获得【年份】
  5.根据日期<年份月份>获得【年份】
  6.根据日期<年份月份>获得【月份】
  7.根据日期<String>获得【月-日】
  8.根据日期<String>获得【年-月】
  9.当前时间的毫秒数

package ...;


import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Minutes;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import static org.apache.poi.ss.usermodel.DateUtil.toLocalDateTime;

/**
 * @version V1.0
 * @Title: Joda日期时间--工具类
 * @ClassName:DateTimeUtils.java
 * @Description:
 *
 * // ++++++++【格式转换】+++++++++
 * 1.将 String 转为 date
 * 2.日期字符串格式化输出
 * 3.Date类型日期转字符串格式化输出
 * 4.获取当前指定格式的系统时间
 *
 * // ++++++++【日期加减】+++++++++
 * 1.增加天数后的Date日期
 * 2.减少天数后的日期
 * 3.增加月数后的日期
 * 4.减少月数后的日期
 * 5.减少年数后的日期
 *
 * // ++++++++【日期间隔】+++++++++
 * 1.和当前系统时间相隔的分钟数
 * 2.获取start到end的时间间隔
 *
 * // ++++++++【工作日/节假日/周末判断】+++++++++
 * 1.判断是否为交易日/工作日
 * 2.判断是否是周末
 * 3.判断是否为国家法定节假日
 * 4.判断是否为国家调整后的工作日
 * 5.判断目标时间是否在区间内
 * 6.判断两个日期(一个Date类型一个String类型)是否在同一天
 *
 * // ++++++++【查看月份、年份,星期】+++++++++
 * 1.根据日期<Date>获得当前星期几
 * 2.根据日期<String>获得【星期】
 * 3.根据日期<String>获得【月份】
 * 4.根据日期<String>获得【年份】
 * 5.根据日期<年份月份>获得【年份】
 * 6.根据日期<年份月份>获得【月份】
 * 7.根据日期<String>获得【月-日】
 * 8.根据日期<String>获得【年-月】
 * 9.当前时间的毫秒数
 *
 * @Copyright 2016-2017  - Powered By 研发中心
 * @author: 王延飞
 * @date:2016年12月24日 上午10:54:27
 */
public class DateTimeUtils {

    /**
     * 时间格式常量
     */
    public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss";
    public static final String COMMON_PATTERN_TYPE2 = "yyyy/MM/dd HH:mm:ss";
    public static final String SHORT_PATTERN = "yyyy-MM-dd";
    public static final String SHORT_PATTERN_TYPE2 = "yyyy/MM/dd";
    public static final String LONG_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String SUP_SHORT_PATTERN = "yyyyMMdd";
    public static final String SUP_LONG_PATTERN = "yyyyMMddHHmmss";
    public static final String YEAR_MONTH = "yyyyMM";
    public static final String YEAR = "yyyy";
    public static final String CN_SHORT_PATTERN = "yyyy年MM月dd日";
    public static final String CN_YEAR_MONTH = "yyyy年MM月";
    public static final String DDMM_PATTERN = "ddMM";

    // ++++++++【格式转换】+++++++++
    /**
     * 1、将 String 解析为 date
     *
     * @param dateString 待解析的日期字符串
     * @param pattern    日期字符串的时间格式
     * @return
     */
    public static Date trans2Date(String dateString, String pattern) {
        String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN;
        DateTimeFormatter format = DateTimeFormat.forPattern(fRTN);
        DateTime dt = DateTime.parse(dateString, format);
        return dt.toDate();
    }

    /**
     * 2、日期字符串格式化输出
     *
     *@param
     * dateString 待格式化的日期字符串
     *
     *@param
     * fromPattern 待格式化日期字符串的格式
     *
     * @param
     * toPattern 格式化后的日期格式
     *@return
     */

    public static String formatDate2String(String dateString, String fromPattern, String toPattern) {
        String tRTN = StringUtils.isNotBlank(toPattern) ? toPattern : COMMON_PATTERN;
        DateTimeFormatter format = DateTimeFormat.forPattern(fromPattern);
        DateTime dt = DateTime.parse(dateString, format);
        return dt.toString(tRTN);
    }

    /**
     * 3、Date类型日期转字符串格式化输出
     *
     * @param date    待格式化的日期
     * @param pattern 格式化后的格式
     * @return
     */
    public static String formatDate2String(Date date, String pattern) {
        String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN;
        DateTimeFormatter format = DateTimeFormat.forPattern(fRTN);
        return new DateTime(date).toString(format);
    }

    /**
     * @return String
     * @Title: 4.获取当前指定格式的系统时间 <br/>
     * <br/>
     * <格式 :yyyy-MM-dd HH:mm:ss>
     * @Description:
     * @author: 王延飞
     * @date:2016年12月24日 上午10:59:14
     */
    public static String getCurSysTime(String pattern) {
        String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN;
        // 初始化时间
        DateTime dateTime = new DateTime();
        return dateTime.toString(fRTN);
    }

    // ++++++++【日期加减】+++++++++

    /**
     * 1、增加天数后的Date日期
     *
     * @param date      起点日期(date/string)
     * @param daysCount 增加天数
     * @return
     */
    public static <T> Date add(T date, int daysCount) {
        DateTime dt = new DateTime(date);
        return dt.plusDays(daysCount).toDate();
    }


    /**
     *2、减少天数后的日期
     *
     * @param date      起点日期(date/string)
     * @param daysCount 减少的天数
     * @return
     */
    public static <T> Date sub(T date, int daysCount) {
        DateTime dt = new DateTime(date);
        return dt.minusDays(daysCount).toDate();
    }

    /**
     * 3、增加月数后的日期
     *
     * @param date      起点日期(date/string)
     * @param months    增加月数
     * @return
     */
    public static <T> Date addMonths(T date, int months) {
        DateTime dt = new DateTime(date);
        return dt.plusMonths(months).toDate();
    }

    /**
     * 4、减少月数后的日期
     *
     * @param
     * date 起点日期(date/string)
     *
     * @param
     * months 减少的月数
     * @return
     */
    public static <T> Date subMonths(T date, int months) {
        DateTime dt = new DateTime(date);
        return dt.minusMonths(months).toDate();
    }

    /**
     * 5、减少年数后的日期
     *
     * @param
     * date 起点日期(date/string)
     *
     * @param
     * years 减少的年数
     * @return
     */

    public static <T> Date subYears(T date, int years) {
        DateTime dt = new DateTime(date);
        return dt.minusYears(years).toDate();
    }

    // ++++++++【日期间隔】+++++++++

    /**
     * @param date
     * @return int
     * @Title: 1.和当前系统时间相隔的分钟数
     * @methodName: minutesBetween
     * @Description:
     * @author: 王延飞
     * @date: 2017-06-29 15:01
     */
    public static int minutesBetween(Date date) {

        // 系统当前时间
        DateTime SysTime = new DateTime();

        DateTime dateTime = null;
        if (date != null) {
            dateTime = new DateTime(date);
        }

        int minutes = Minutes.minutesBetween(dateTime, SysTime).getMinutes();

        return minutes;
    }


    /**
     * @Title: 2.获取start到end的时间间隔
     * @MethodName:  getBetweenDate
     * @param start 开始时间
     * @param end 结束时间
     * @param interval 时间间隔
     * @Return long
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date:  2021/6/5 11:15
     */
    public static long getBetweenDate(Date start, Date end,String interval) {
        ChronoUnit chronoUnit = ChronoUnit.DAYS;
        switch (interval) {
            case "DAYS":
                chronoUnit = ChronoUnit.DAYS;
                break;
            case "WEEKS":
                chronoUnit = ChronoUnit.WEEKS;
                break;
            case "MONTHS":
                chronoUnit = ChronoUnit.MONTHS;
                break;
            case "YEARS":
                chronoUnit = ChronoUnit.YEARS;
                break;
            default:
                chronoUnit = ChronoUnit.DAYS;
        }
        return toLocalDate(start).until(toLocalDate(end), chronoUnit);
    }

    public static java.time.LocalDate toLocalDate(Date d) {
        return toLocalDateTime(d).toLocalDate();
    }


    // ++++++++++++++++++++++++++++++++++++++++++++++++【工作日/节假日/周末判断】+++++++++++++++++++++++++++++++++++++++++++++++++
    /**
     * 1、判断是否为交易日/工作日
     *
     * @param date 待判断日期(date/string)
     * @return
     */
    public static <T> boolean isTradeDay(T date) {
        boolean isTD = false;
        DateTime dt = new DateTime(date);
        if (isSpWorkDay(dt) || (!isHoliday(dt) && !isWeekEnd(dt))) {
            isTD = true;
        }
        return isTD;
    }

    /**
     * @Title: 2. 判断是否是周末
     * @MethodName:  isWeekEnd
     * @param dt
     * @Return boolean
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date:  2021/6/5 10:54
     */
    private static boolean isWeekEnd(DateTime dt) {

        boolean isWE = false;
        int wd = dt.dayOfWeek().get();
        switch (wd) {
            case 6:
            case 7:
                isWE = true;
                break;
            default:
                break;
        }
        return isWE;
    }

    /**
     * @Title: 3、判断是否为国家法定节假日
     * @MethodName:  isHoliday
     * @param dt
     * @Return boolean
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date:  2021/6/5 10:54
     */
    private static boolean isHoliday(DateTime dt) {

        boolean isHD = false;
        //TODO:get days from redis -- 存储国家法定节假日数据
        List<String> holidayList = new ArrayList<String>();
        if (holidayList != null) {
            for (String holiday : holidayList) {
                if (dt.isEqual(new DateTime(holiday))) {
                    isHD = true;
                    break;
                }
            }
        }
        return isHD;
    }

    /**
     * @Title: 4. 判断是否为国家调整后的工作日
     * @MethodName:  isSpWorkDay
     * @param dt
     * @Return boolean
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date:  2021/6/5 10:56
     */
    private static boolean isSpWorkDay(DateTime dt) {

        boolean isSpWD = false;
        //TODO:get days from redis -- 国家调整后的工作日
        List<String> spWorkDayList = new ArrayList<String>();
        if (spWorkDayList != null) {
            for (String spWorkDay : spWorkDayList) {
                if (dt.isEqual(new DateTime(spWorkDay))) {
                    isSpWD = true;
                    break;
                }
            }
        }
        return isSpWD;
    }


    /**
     * 5、判断目标时间是否在区间内
     * @param sDate 开始时间date/string
     * @param eDate 结束时间date/string
     * @param cDate 目标时间date/string
     * @param <T>
     * @return
     */
    public static <T> boolean isInRange(T sDate, T eDate, T cDate) {
        DateTime dtLow = new DateTime(sDate);
        DateTime dtHigh = new DateTime(eDate);
        DateTime dt = new DateTime(cDate);
        if (dt.getMillis() >= dtLow.getMillis() && dt.getMillis() <= dtHigh.getMillis()) {
            return true;
        }
        return false;
    }

    /**
     * @param date
     * @param anotherDate
     * @return boolean
     * @Title: 6.判断两个日期(一个Date类型一个String类型)是否在同一天
     * @methodName: isSameDay
     * @Description:
     * @author: 王延飞
     * @date: 2017-05-02 20:19
     */
    public static boolean isSameDay(String date, String anotherDate) {

        boolean res = false;
        // 初始化时间
        DateTime dateTime = new DateTime();

        DateTime dt1 = new DateTime(date);
        DateTime dt2 = new DateTime(anotherDate);

        int intervalDays = Days.daysBetween(dt1, dt2).getDays();

        if (intervalDays == 0) {
            res = true;
        }

        return res;

    }


    // ++++++++【查看月份、年份,星期】+++++++++
    /**
     * @param date
     * @return String
     * @Title: 1.根据日期<Date>获得当前星期几
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:22:23
     */
    public static String getWeekOfDate(Date date) {
        String[] weekDaysName = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        String[] weekDaysCode = {"0", "1", "2", "3", "4", "5", "6"};
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;

        return weekDaysName[intWeek];
    }

    /**
     * @param date
     * @return String
     * @Title: 2.根据日期<String>获得【星期】
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:50:35
     */
    public static String getWeekOfDateStr(String date) {
        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(COMMON_PATTERN).parseDateTime(date);
        }
        // Get the day of week field value.
        int dayOfWeek = dateTime.getDayOfWeek();

        switch (dayOfWeek) {
            case 1:
                res = "周一";
                break;
            case 2:
                res = "周二";
                break;
            case 3:
                res = "周三";
                break;
            case 4:
                res = "周四";
                break;
            case 5:
                res = "周五";
                break;
            case 6:
                res = "周六";
                break;
            case 7:
                res = "周日";
                break;

            default:
                break;
        }
        return res;
    }

    /**
     * @param date
     * @return String
     * @Title: 3.根据日期<String>获得【月份】
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:50:35
     */
    public static String getMonthOfDateStr(String date) {
        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(COMMON_PATTERN).parseDateTime(date);
        }
        // Get the month of year field value
        int monthOfYear = dateTime.getMonthOfYear();

        res = String.valueOf(monthOfYear);

        return res;

    }

    /**
     * @param date
     * @return String
     * @Title: 4.根据日期<String>获得【年份】
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:50:35
     */
    public static String getYearOfDateStr(String date) {
        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(COMMON_PATTERN).parseDateTime(date);
        }
        // Get the year field value.
        int year = dateTime.getYear();

        res = String.valueOf(year);

        return res;

    }

    /**
     * @param date
     * @return java.lang.String
     * @Title: 5.根据日期<年份月份>获得【年份】
     * @methodName: getYearOfYearMonth
     * @Description:
     * @author: 王延飞
     * @date: 2017-01-23 14:47
     */
    public static String getYearOfYearMonth(String date) {

        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(CN_YEAR_MONTH).parseDateTime(date);
        }
        // Get the year field value.
        int year = dateTime.getYear();

        res = String.valueOf(year);

        return res;

    }

    /**
     * @param date
     * @return java.lang.String
     * @Title: 6.根据日期<年份月份>获得【月份】
     * @methodName: getMonthOfYearMonth
     * @Description:
     * @author: 王延飞
     * @date: 2017-01-23 14:50
     */
    public static String getMonthOfYearMonth(String date) {

        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(CN_YEAR_MONTH).parseDateTime(date);
        }
        // Get the year field value.
        int monthOfYear = dateTime.getMonthOfYear();

        res = String.valueOf(monthOfYear) + "月";

        return res;

    }

    /**
     * @param date
     * @return String
     * @Title: 7.根据日期<String>获得【月-日】
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:50:35
     */
    public static String getMonthAndDayOfDateStr(String date) {
        // 返回值
        String res = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(COMMON_PATTERN).parseDateTime(date);
        }
        // Get the month of year field value
        int monthOfYear = dateTime.getMonthOfYear();


        int dayOfMonth = dateTime.getDayOfMonth();

        res = monthOfYear + "-" + dayOfMonth;

        return res;

    }

    /**
     * @param date
     * @return String
     * @Title: 8.根据日期<String>获得【年-月】
     * @Description:
     * @author: 王延飞
     * @date:2016年12月30日 下午8:50:35
     */
    public static String getYearAndMonthOfDateStr(String date) {
        // 返回值
        String res = "";
        String month = "";
        DateTime dateTime = null;
        if (StringUtils.isNotBlank(date)) {
            dateTime = DateTimeFormat.forPattern(COMMON_PATTERN).parseDateTime(date);
        }

        // Get the year field value.
        int year = dateTime.getYear();

        // Get the month of year field value
        int monthOfYear = dateTime.getMonthOfYear();

        if (monthOfYear < 10) {
            month = "0" + monthOfYear;
        } else {
            month = String.valueOf(monthOfYear);
        }

        res = year + "年" + month + "月";
        return res;

    }


    /**
     * @param
     * @return long
     * @Title: 9.当前时间的毫秒数
     * @methodName: timestamp
     * @Description:
     * @author: 王延飞
     * @date: 2018-06-21 17:28
     */
    public static long timestamp() {

        DateTime dateTime = new DateTime();
        long millis = dateTime.getMillis();
        return millis;
    }




    public static void main(String[] args) {

        // 获取当前系统时间
        System.out.println("获取当前系统时间: "+getCurSysTime(null));
        // 获取start到end的时间间隔
        Date date = new Date(2006,0,10,22,19,35); ;
        Date date2 = new Date(2021,06,05,22,19,35); ;
        long years = getBetweenDate(date, date2, "YEARS");
        System.out.println("获取start到end的时间间隔: "+years);

        Date add = add("2021-03-09", 10);
        System.out.println("加天数后的Date日期"+add);

        String abc = "2021-06-05";
        boolean tradeDay = isTradeDay(abc);
        System.out.println("判断是否为交易日/工作日"+tradeDay);

        DateTime dateTime = new DateTime(date2);
        boolean weekEnd = isWeekEnd(dateTime);
        System.out.println("判断是否是周末"+weekEnd);



    }

}

参考了其他的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琦彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值