java中操作时间的常用工具类

在开发中经常会遇到操作时间类的业务,虽然代码部分并不算难,但为了今后查找和使用方便,现将常用的几种操作时间的工具类代码予以罗列,以便今后参考;

下面直接上代码,难度不大,诸位小伙伴可自行参考,酌情使用,

public class TimeUtils {

    public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    public static final String MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
    public static final String HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_PATTERN = "yyyy-MM-dd";
    public static final String MONTH_PATTERN = "yyyy-MM";
    public static final String YEAR_PATTERN = "yyyy";
    public static final String MINUTE_ONLY_PATTERN = "mm";
    public static final String HOUR_ONLY_PATTERN = "HH";

    /**
     * @param date
     * @param pattern
     * @return
     */
    public static String dateFormatStr(Date date, String pattern) {
        if (StringUtils.isEmpty(pattern)) {
            pattern = TimeUtils.DATE_TIME_PATTERN;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 字符串转化为时间对象
     * 
     * @param dateTimeString
     * @param pattern
     * @return
     * @throws ParseException
     */
    public static Date strToDate(String dateTimeString, String pattern) throws ParseException {
        if (StringUtils.isEmpty(pattern)) {
            pattern = TimeUtils.MINUTE_PATTERN;
        }

        if (dateTimeString == null || dateTimeString == "") {
            System.out.println("传入的时间字符串参数不能为空");
        }

        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = sdf.parse(dateTimeString);

        return date;
    }

    // 日期时间格式转化为日期对象
    public static Date dateTimeToDate(Date dateTime) throws Exception {

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateTime);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        return calendar.getTime();
    }

    /**
     * 小时数量相加
     * 
     * @param dateStr
     * @param addHour
     * @return
     */
    public static Date dateAddHours(Date dateStr, int addHour) {

        if (StringUtils.isEmpty(dateStr)) {
            System.out.println("传入的时间不能为空");
        }
        if (addHour == 0) {
            System.out.println("时间加数不能为0");
        }

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateStr);
        calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + addHour);

        return calendar.getTime();
    }

    /**
     * 天数相加
     * 
     * @param dateStr
     * @param days
     * @return
     */
    public static Date dateAddDay(Date dateStr, int days) {

        if (StringUtils.isEmpty(dateStr)) {
            System.out.println("传入的时间不能为空");
        }

        if (StringUtils.isEmpty(days) || days == 0) {
            System.out.println("传入的天数不能为");
        }

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateStr);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + days);
        return calendar.getTime();

    }

    /**
     * 分相加
     * 
     * @param dateStr
     * @param minutes
     * @return
     */
    public static Date dateMinuteAdd(Date dateStr, int minutes) {

        if (StringUtils.isEmpty(dateStr)) {
            System.out.println("传入的时间不能为空");
        }
        if (StringUtils.isEmpty(minutes) || minutes == 0) {
            System.out.println("传入的加数不能为空");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateStr);
        calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + minutes);
        return calendar.getTime();
    }

    /**
     * 两个时间比较
     * 
     * @param mydate
     * @param comparedate
     * @return
     */
    public static int dateCompare(Date mydate, Date comparedate) {
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();
        calendar1.setTime(mydate);
        calendar2.setTime(comparedate);

        return calendar1.compareTo(calendar2);

    }

    /**
     * 获取两个时间中比较小的一个
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static Date dateMin(Date date1, Date date2) {

        if (date1 == null) {
            return date2;
        }
        if (date2 == null) {
            return date1;
        }

        if (1 == TimeUtils.dateCompare(date1, date2)) {
            return date2;
        } else if (-1 == TimeUtils.dateCompare(date1, date2)) {
            return date1;
        }
        return date1;
    }

    /**
     * 获取两个时间中比较小的一个
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static Date dateMax(Date date1, Date date2) {

        if (date1 == null) {
            return date2;
        }
        if (date2 == null) {
            return date1;
        }

        if (1 == TimeUtils.dateCompare(date1, date2)) {
            return date1;
        } else if (-1 == TimeUtils.dateCompare(date1, date2)) {
            return date2;
        }
        return date1;
    }

    /**
     * 获取给定日期的年份
     * 
     * @param date
     * @return
     */
    public static int getDateOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }

    /**
     * 获取给定日期的月份数
     * 
     * @param date
     * @return
     */
    public static int getMonthOfDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH);
    }

    /**
     * 获取日期时间当年的总天数,如201-09-12,返回2018年的总天数
     * 
     * @param date
     * @return
     */
    public static int getDaysOfYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
    }


    @Test
    public void testAllDays(){
        Date date = new Date();
        int dayas = TimeUtils.getDaysOfYear(date);
        System.out.println(dayas);
    }

    @Test
    public void testCompareTime() throws Exception {
        Date date1 = new Date();
        Thread.sleep(5000);
        Date date2 = new Date();
        System.out.println(TimeUtils.dateCompare(date2, date1));

    }

    public static void main(String[] args) throws Exception {
        Date date = new Date();
        int addHour = 3;
        System.out.println("现在的时间点是:" + date.getHours());

        Date date2 = TimeUtils.dateAddHours(date, addHour);

        System.out.println("相加后的时间是 : " + date2.getHours());
    }

    @Test
    public void test1() throws ParseException {

        String pattern = "";
        // String dateTimeString = "2018-09-13 13:33:52";
        String dateTimeString = "";
        Date date = TimeUtils.strToDate(dateTimeString, pattern);
        System.out.println(date.toString());
    }

    @Test
    public void testAddDay() {
        Date date = new Date();
        int days = 2;
        System.out.println("原来的天数为:" + date.getDay());
        Date date2 = TimeUtils.dateAddDay(date, days);
        System.out.println("现在的天数为:" + date2.getDay());
    }

    @Test
    public void testAddMinute() {

        Date date = new Date();
        int minutes = 10;
        System.out.println("相加前的时间是:" + date.getMinutes());
        Date date2 = TimeUtils.dateMinuteAdd(date, minutes);
        System.out.println("相加后的时间是 : " + date2.getMinutes());
    }

}

代码里面想要说明的一点是,在实际开发中,单纯的对日期时间做处理是不能满足业务需求的,比如有这样一个需求,给定了两个时间段,需要查询这个时间段内所有的订单数量,精确到天,这种情况下,除了需要对日期做格式的转换,还需要对时间做加减的操作,也就需要JDK的calendar工具包一起配合使用才能达到效果,关于calendar的使用,大家可以参考相关的材料,使用得当,可以收到奇效。

猜你喜欢

转载自blog.csdn.net/zhangcongyi420/article/details/82662052