时间工具类

可以实现的方法有:
在date上增加days天,在date上减去days天,在date上增加hours小时,分钟,年,月,把date转化为指定pattern的字符串,获取指定时期带星期字符串,根据日期获取星期,据日期获取星期编号星期一到星期七 1-7,获取两个日期之间的所有日期,是否今天,判断字符串是否为日期字符串

package com.lbonline.tms.util;


import org.apache.commons.lang3.StringUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author wangtengfei
 * @date 17/12/19
 */
public class DateUtils {
    private DateUtils(){}
    /**
     * 时间原点:2010-01-01 00:00:00 UTC
     */
    public static final long TIME_ORIGIN = 1262275200000L;

    public static final String YMD = "yyyy-MM-dd";

    public static final String YYYYMMDD = "yyyyMMdd";

    public static final String MD = "MMdd";

    public static final String HM = "HH:mm";

    public static final String YM = "yyyy-MM";

    public static final String D = "dd";

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

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

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

    public static final String MDHm = "MM-dd HH:mm";

    public static final String LAST_SECONDS = " 23:59:59";

    public static final String FIRST_SECONDS = " 00:00:00";


    public static final String[] WEEK = new String[]{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    /***
     * 在date上增加days天
     * @param date
     * @param days
     * @return
     */
    public static Date
    addDays(Date date, int days) {
        return org.apache.commons.lang3.time.DateUtils.addDays(date, days);
    }

    /***
     * 在date上减去days天
     * @param date
     * @param days
     * @return
     */
    public static Date subDays(Date date, int days) {
        Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
        cal.add(Calendar.DAY_OF_MONTH, -days);//取当前日期的前一天.
        return cal.getTime();
    }

    /**
     * 在此日期上减去相应的天数-ljm
     * @param date
     * @param days
     * @return
     */
    public static Date realSubDays(Date date, int days) {
        Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
        cal.setTime(date);
        cal.add(Calendar.DATE, -days);//取当前日期的前一天.
        return cal.getTime();
    }
    public static void main(String[] asg){
       /* SimpleDateFormat simpleDateFormat = current SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse = DateUtils.parse(DateUtils.format(DateUtils.subDays(current Date(), 0), DateUtils.YMD) + DateUtils.FIRST_SECONDS, DateUtils.YMDHms);
        System.out.println(simpleDateFormat.format(parse));*/

//        System.out.println(30/4);
        System.out.println(getDays("2018-09-26","2018-09-30"));

    }

    /***
     * 在date上增加hours小时
     * @param date
     * @param hours
     * @return
     */
    public static Date addHours(Date date, int hours) {
        return org.apache.commons.lang3.time.DateUtils.addHours(date, hours);
    }

    public static Date addMinutes(Date date, int minutes) {
        return org.apache.commons.lang3.time.DateUtils.addMinutes(date, minutes);
    }

    public static Date addMonth(Date date, int month) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + month);
        return calendar.getTime();
    }

    public static Date addYear(Date date, int year) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + year);
        return calendar.getTime();
    }

    public static Date getNow() {
        return new Date();
    }

    /**
     * @func 把date转化为指定pattern的字符串
     * @date 2013-5-28
     * @version 1.2.20
     */
    public static String format(Date date, String pattern) {
        if (date == null) {
            return null;
        }

        if (StringUtils.isBlank(pattern)) {
            pattern = YMD;
        }

        DateFormat df = new SimpleDateFormat(pattern);
        return df.format(date);

    }


    /**
     * 获取指定时期带星期字符串
     * @param date
     * @return
     */
    public static String getDateWeekTime(Date date){
        //星期几自己判断,不直接取系统时间
        if (date == null)
            return null;
        String week = getWeekOfDate(date);
        SimpleDateFormat dt1 = new SimpleDateFormat(DATE_WEEK_STR);
        String time = dt1.format(date);
        if (StringUtils.isNotEmpty(time)){
            String [] array = time.split(" ");
            return array[0]+" ("+week+") "+array[1];
        }
        return null;
    }
    public static Date parse(String dateStr, String pattern) {
        if (StringUtils.isBlank(dateStr)) {
            return null;
        }
        if (StringUtils.isBlank(pattern)) {
            pattern = YMD;
        }
        DateFormat df = new SimpleDateFormat(pattern);
        try {
            Date date = df.parse(dateStr);
            return date;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 根据日期获取星期
     * @param date
     * @return
     */
    public static String getWeek(Date date){
        if (date == null) return null;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        return WEEK[dayOfWeek];
    }

    /**
     *根据日期获取星期编号星期一到星期七 1-7
     * @param date
     * @return 具体数字
     */
    public static int getWeekNum(Date date){
        if (date == null) return -1;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        return dayOfWeek==0?7:dayOfWeek;
    }

    /**
     * 判断第一周上几个课时
     * @param rate
     * @param classHour
     * @return
     */
    public static int firstWeekNum(String rate,String classHour){
        //获得当前日期是周几
        int weekNum = getWeekNum(parse(classHour, YMD));
        //获取上课频率
        String[] rates = rate.split(",");
        int min = Math.min(Integer.parseInt(rates[0]), Integer.parseInt(rates[1]));
        int max = Math.max(Integer.parseInt(rates[0]), Integer.parseInt(rates[1]));
        if (weekNum<=min) {
            return 2;
        }else if(min<weekNum && weekNum<=max){
            return 1;
        }else {
            return 0;
        }

    }

    /**
     * 获取第一周结束的日期
     * @param classHour
     * @return
     */
    public static String afterFirstWeekDate(String classHour){
        //获得当前日期是周几
        int weekNum = getWeekNum(parse(classHour, YMD));
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(addDays(parse(classHour,YMD),(7-weekNum)));
    }

    /**
     * 获取两个日期之间的所有日期
     * @param startTime
     * @param endTime
     * @return
     */
    public static List<String> getDays(String startTime, String endTime) {

        // 返回的日期集合
        List<String> days = new ArrayList<String>();

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date start = dateFormat.parse(startTime);
            Date end = dateFormat.parse(endTime);

            Calendar tempStart = Calendar.getInstance();
            tempStart.setTime(start);

            Calendar tempEnd = Calendar.getInstance();
            tempEnd.setTime(end);
            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
            while (tempStart.before(tempEnd)) {
                days.add(dateFormat.format(tempStart.getTime()));
                tempStart.add(Calendar.DAY_OF_YEAR, 1);
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return days;
    }

    /***
     * 是否今天
     * @param date
     * @return
     */
    public static boolean isToday(Date date){
        SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
        return fmt.format(date).toString().equals(fmt.format(new Date()).toString());//格式化为相同格式
    }

    public static boolean isBeforeDate(Date date){
        Date nowDate = new Date();
        String dateStr = format(nowDate, "yyyy-MM-dd");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",
                Locale.CHINA);
        try {
            Date now = sdf.parse(dateStr);
            return now.compareTo(date) > 0;
        } catch (ParseException e) {
            e.printStackTrace();
            return true;
        }
    }

    /**
     * 获取当前日期是星期几<br>
     *
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        return weekDays[w];
    }


    /**
     * //获取前月的第一天
     *
     * @param date
     * @return
     */
    public static Date getFirstForMonth(Date date) {
        Calendar calendar = Calendar.getInstance();//获取当前日期
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
        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();
    }

    /**
     * 获取最后一天的59分59秒
     * @param date
     * @return
     */
    public static Date getLastForMonth(Date date){
        Calendar calendar = Calendar.getInstance();//获取当前日期
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }


    /**
     * 判断字符串是否为日期字符串
     * @param date
     * @param format
     * @return
     */
    public static boolean checkStringIsDate(String date,String format){
        SimpleDateFormat sd = new SimpleDateFormat(format);
        sd.setLenient(false);
        try
        {
            sd.parse(date);
            return true;
        }
        catch (Exception e)
        {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            return false;
        }
    }



}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值