0
点赞
收藏
分享

微信扫一扫

java获取指定时间范围及常用方法

一叶随风_c94d 2022-03-12 阅读 83

常用日期工具

import java.math.RoundingMode;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * @ClassName: DateUtil
 * @Description: 日期公共方法
 * @Author: lxl
 * @Date: 2022/3/10 15:41
 * @Version: 1.0
 */
public class DateUtil {

    private static final SimpleDateFormat YMDHMS_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static final SimpleDateFormat YMDHM_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    private static final SimpleDateFormat YMD_SDF = new SimpleDateFormat("yyyy-MM-dd");

    private static final String HMS_ZERO = " 00:00:00";
    private static final String S_ZERO = ":00";

    /**
    * @Description:    根据当前时间获取查询时间
    * @Author:          lxl
    * @CreateDate:     2022/3/10 15:56
    * @Version:        1.0
    */
    public static Map<String, String> getDateMap(Date now, Integer type){
        Map<String, String> dateMap = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Date startDate;
        Date startTime;
        Date endDate;
        Long num = getMinute(type);
        try {
            endDate = sdf.parse(sdf.format(now));
            startDate = new Date(endDate.getTime() - num*60*1000);
            startTime = new Date(endDate.getTime() - num*60*1000 - 60*1000);
        } catch (ParseException e) {
            e.printStackTrace();
            startDate = new Date(new Date().getTime() - num*60*1000);
            startTime = new Date(new Date().getTime() - num*60*1000 - 60*1000);
            endDate = new Date();
        }
        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateMap.put("startTime", sdf.format(startTime));
        dateMap.put("startDate", sdf.format(startDate));
        dateMap.put("endDate", sdf.format(endDate));
        return dateMap;
    }
    /**
    * @Description:    获取对应分钟数
    * @Author:          lxl
    * @CreateDate:     2022/3/10 19:10
    * @Version:        1.0
    */
    public static Long getMinute(Integer type){
        if(type == 1) {
            return 1L;
        } else if(type == 2) {
            return 10L;
        } else if(type == 3) {
            return 30L;
        } else if(type == 4) {
            return 60L;
        } else if(type == 5) {
            return 24*60L;
        }
        return 1L;
    }
    /**
    * @Description:    获取前一天的时间
    * @Author:          lxl
    * @CreateDate:     2022/3/10 16:09
    * @Version:        1.0
    */
    public static String getYesterday(String now){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date yesterday;
        Date nowDate;
        try {
            nowDate = sdf.parse(now);
            yesterday = new Date(nowDate.getTime() - 24*60*60*1000);
        } catch (ParseException e) {
            e.printStackTrace();
            yesterday = new Date(new Date().getTime() - 24*60*60*1000);
        }
        return sdf.format(yesterday);
    }
    /**
    * @Description:    计算比率
    * @Author:          lxl
    * @CreateDate:     2022/3/10 16:19
    * @Version:        1.0
    */
    public static String accuracy(Integer num, Integer total, int scale){
        if(total == 0) {
            return "100";
        }
        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
        //可以设置精确几位小数
        df.setMaximumFractionDigits(scale);
        //模式 例如四舍五入
        df.setRoundingMode(RoundingMode.HALF_UP);
        double accuracy_num = (double) num/total * 100;
        return df.format(accuracy_num);
    }
    /**
    * @Description:    获取当前时间
    * @Author:          lxl
    * @CreateDate:     2022/3/10 10:19
    * @Version:        1.0
    */
    public static String getNowTime(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new Date());
    }

    /**
    * @Description:    获取n天前查询时间
    * @Author:          lxl
    * @CreateDate:     2022/3/10 16:45
    * @Version:        1.0
    */
    public static Map<String, String> getNDate(Integer num){
        Date day = new Date(System.currentTimeMillis() - num*24*60*60*1000);
        Map<String, String> dateMap = new HashMap<>();
        dateMap.put("statsDate", YMD_SDF.format(day));
        dateMap.put("startDate", YMD_SDF.format(day) + " 00:00:00");
        dateMap.put("endDate", YMD_SDF.format(day) + " 23:59:59");
        return dateMap;
    }

    /**
     * @Description:    获取当天查询时间 半小时
     * @Author:          lxl
     * @CreateDate:     2022/3/10 15:56
     * @Version:        1.0
     */
    public static Map<String, String> getTodayMap(Date now){
        Map<String, String> dateMap = new HashMap<>();
        Date startTime = new Date(now.getTime() - 30*60*1000);
        dateMap.put("statsDate", YMD_SDF.format(startTime));
        dateMap.put("startDate", YMD_SDF.format(startTime) + HMS_ZERO);
        dateMap.put("endDate", YMDHM_SDF.format(now) + S_ZERO);
        return dateMap;
    }

    /**
     * 获取查询时间 前半小时 - 一小时
     * @author lxl on 2022/3/10 14:13
     */
    public static Map<String, String> getBeforeHalfDateTime(Date date) {
        Map<String, String> dateMap = new HashMap<>();
        Date startTime = new Date(date.getTime() - 70*60*1000);
        Date endTime = new Date(date.getTime() - 30*60*1000);
        dateMap.put("startTime", YMDHM_SDF.format(startTime) + ":00");
        dateMap.put("endTime", YMDHM_SDF.format(endTime) + ":00");
        return dateMap;
    }

    /**
     * @Description:    md5加密
     * @Author:          lxl
     * @CreateDate:     2022/3/10 13:55
     * @Version:        1.0
     */
    public static String md5(String source) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        md.update(source.getBytes());
        byte[] tmp = md.digest();
        char[] str = new char[16 * 2];
        int k = 0;
        for (int i = 0; i < 16; i++) {
            byte byte0 = tmp[i];
            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
    }

    /**
     * @Description:    业务流水号
     * @Author:          lxl
     * @CreateDate:     2022/3/10 11:42
     * @Version:        1.0
     */
    public static String makeNum() {
        Random rm = new Random();
        String num = rm.nextInt(9999999) + "";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 7 - num.length(); i++) {
            sb.append("0");
        }
        num = sb.toString() + num;
        String n = new SimpleDateFormat("yyHHmmssSSS").format(new Date());
        return n+num;
    }

//    public static void main(String[] args) {
//        System.out.println(getYesterday("2020-06-01 10:00:00"));
//        System.out.println(getBeforeHalfDateTime(new Date()));
//    }

    /**
     * 获取昨天的时间范围
     * @return
     */
    public static DateRangeDto getYesterdayRange() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.DAY_OF_MONTH, -1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.add(Calendar.DAY_OF_MONTH, -1);
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }

    private static void setMinTime(Calendar calendar){
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
    }

    private static void setMaxTime(Calendar calendar){
        calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
        calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
        calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
        calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
    }

    public static String dateFormatyMdHms(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * description:获取某天某时某分某秒的时间
     *
     * @date: 2022/03/09
     */
    public static String packingTime(Integer day,Integer hour,Integer minute,Integer second){
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, day);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        Date newUnpackingTime = calendar.getTime();
        return dateFormatyMdHms(newUnpackingTime);
    }
    /**
     * 获取date的月份的时间范围
     * @param date
     * @return
     */
    public static DateRangeDto getMonthRange(Date date) {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMaxTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }


    /**
     * 获取当前季度的时间范围
     * @return current quarter
     */
    public static DateRangeDto getThisQuarter() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }


    /**
     * 获取当前月份的时间范围
     * @return
     */
    public static DateRangeDto getThisMonth(){
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }



    /**
     * 获取上个月的时间范围
     * @return
     */
    public static DateRangeDto getLastMonth(){
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.MONTH, -1);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.add(Calendar.MONTH, -1);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }



    /**
     * 获取上个季度的时间范围
     * @return
     */
    public static DateRangeDto getLastQuarter() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
    }
    




    public final static String DEFAULT_PATTERN = "MM/dd/yyyy HH:mm:ss";


    public static String format(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
        return sdf.format(date);
    }

}

时间范围实体类:DateRangeDto

import java.util.Date;

public class DateRangeDto {
	private Date start;
	private Date end;

	public DateRangeDto(Date start, Date end) {
		this.start = start;
		this.end = end;
	}
	
	public Date getStart() {
		return start;
	}
	public void setStart(Date start) {
		this.start = start;
	}
	public Date getEnd() {
		return end;
	}
	public void setEnd(Date end) {
		this.end = end;
	}
	
}
举报

相关推荐

0 条评论