自定义的一些时间戳和BigDeciamel工具类

本文介绍了IdsMathUtil类,用于处理时间和日期,提供将字符串转换为BigDecimal、从Redis获取数据、以及精度控制的方法,同时展示了TimeStampUtil类,涵盖时间戳计算、日期操作与格式化。
摘要由CSDN通过智能技术生成
package com.saite.energy.data.cache.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;

/**
 * @Description: TODO
 * @author: lijinghui
 * @date: 2021年07月16日 15:13
 */
@Slf4j
public class IdsMathUtil {
    // 保留的小数位数
    public static int BIG_DECIMAL_SCALE = 3;

    public static BigDecimal toDecimal(String val) {
        if (StringUtils.isBlank(val)) {
            return null;
        }
        try {
            return new BigDecimal(val);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 通过存储到redis中的实时数据来获取对应的数据
     * @param obj
     * @return
     */
    public static BigDecimal getBigDecimalByRedisObj(Object obj) {
        if (obj == null) {
            return null;
        }
        return toDecimal(obj.toString());
    }

    /**
     * 转换为字符串,并且保留BigDecemel的3位小数,四舍五入
     * @param value 需要保留小数的参数
     * @return
     */
    public static String getBigDecimalScale(Object value) {
        if (value == null) {
            return null;
        }
        String val = "";
        if (value instanceof BigDecimal) {
            val = ((BigDecimal)value).setScale(BIG_DECIMAL_SCALE, BigDecimal.ROUND_HALF_UP).toString();
        } else if(value instanceof Float) {
            val = new BigDecimal((Float)value).setScale(BIG_DECIMAL_SCALE, BigDecimal.ROUND_HALF_UP).toString();
        } else if(value instanceof Double) {
            val = new BigDecimal((Double) value).setScale(BIG_DECIMAL_SCALE, BigDecimal.ROUND_HALF_UP).toString();
        }  else {
            val = value.toString();
        }
        return val;
    }

    /**
     * 获取针对数据转换为Integer的类,如果出现异常或者为空返回空
     * @param obj
     * @return 整数
     */
    public static Integer getIntegerByObject(Object obj) {
        if (obj == null) {
            log.warn("数据为空");
            return null;
        }
        try {
            return new BigDecimal(obj.toString()).intValue();
        } catch (Exception e) {
            log.error("数据转换错误");
            return null;
        }
    }
}


package com.saite.energy.ids.utils;

import com.saite.energy.ids.enums.TimeDimEnum;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * @description: 时间戳工具类
 * @author: lijinghui
 * @date: 2021/5/25
 */
public class TimeStampUtil {

    /**
     * 获取今日开始时间戳
     *
     * @return
     */
    public static Long dayTimeInMillis() {
        // 获取当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTimeInMillis();
    }

    /**
     * 获取当月开始时间戳
     *
     * @return
     */
    public static Long monthTimeInMillis() {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        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.getTimeInMillis();
    }

    /**
     * 获取今年开始时间戳
     *
     * @return
     */
    public static Long yearTimeInMillis() {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.DATE, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 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.getTimeInMillis();
    }


    /**
     * 获取昨日开始时间时间戳
     *
     * @return
     */
    public static Long yesterdayInMillis() {
        return dayTimeInMillis() - 86400000;
    }

    /**
     * 获取前天开始时间时间戳
     *
     * @return
     */
    public static Long beforeYesterdayInMillis() {
        return dayTimeInMillis() - (86400000 * 2);
    }

    /**
     * 获取上个月开始时间时间戳
     *
     * @return
     */
    public static Long lastMonthInMillis() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, -1);
        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.getTimeInMillis();
    }

    /**
     * 获取去年开始时间时间戳
     *
     * @return
     */
    public static Long lastYearInMillis() {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.YEAR, -1);
        calendar.add(Calendar.DATE, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 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.getTimeInMillis();
    }


    /**
     * 获取指定时间当日开始时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getDayStartTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTimeInMillis();
    }

    /**
     * 获取指定时间当日结束时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getDayEndTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTimeInMillis();
    }


    /**
     * 获取指定时间当月开始时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getMonthStartTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        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.getTimeInMillis();
    }


    /**
     * 获取指定时间当月结束时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getMonthEndTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        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, 999);
        return calendar.getTimeInMillis();
    }


    /**
     * 获取指定时间当年开始时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getYearStartTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.DATE, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 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.getTimeInMillis();
    }


    /**
     * 获取指定时间当年结束时间戳
     *
     * @param timeStamp
     * @return
     */
    public static Long getYearEndTime(Long timeStamp) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        calendar.setTimeInMillis(timeStamp);
        int year = calendar.get(Calendar.YEAR);
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTimeInMillis();
    }


    /**
     * 根据时间纬度和采集开始时间,得到采集开始时间
     *
     * @param collectTime 采集开始时间
     * @param timeDim     时间纬度
     * @return
     */
    public static Long getStartTime(Long collectTime, String timeDim) {
        Long startTime = null;
        if ("year".equals(timeDim)) {
            startTime = TimeStampUtil.getYearStartTime(collectTime);
        } else if ("month".equals(timeDim)) {
            startTime = TimeStampUtil.getMonthStartTime(collectTime);
        } else {
            startTime = TimeStampUtil.getDayStartTime(collectTime);
        }
        return startTime;
    }

    /**
     * 根据时间纬度和采集开始时间,得到采集结束时间
     *
     * @param collectTime 采集开始时间
     * @param timeDim     时间纬度
     * @return
     */
    public static Long getEndTime(Long collectTime, String timeDim) {
        Long endTime = null;
        if ("year".equals(timeDim)) {
            endTime = TimeStampUtil.getYearEndTime(collectTime);
        } else if ("month".equals(timeDim)) {
            endTime = TimeStampUtil.getMonthEndTime(collectTime);
        } else {
            endTime = TimeStampUtil.getDayEndTime(collectTime);
        }
        return endTime;
    }


    /**
     * 根据时间戳和时间纬度,获取日期字符串
     *
     * @param timeStamp 时间戳
     * @param timeDim   时间纬度
     * @return
     */
    public static String getDateStrByTimeDim(Long timeStamp, String timeDim) {
        if ("year".equals(timeDim)) {
            return new SimpleDateFormat("yyyy年", Locale.CHINA).format(new Date(timeStamp));
        } else if ("month".equals(timeDim)) {
            return new SimpleDateFormat("yyyy年MM月", Locale.CHINA).format(new Date(timeStamp));
        } else {
            return new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA).format(new Date(timeStamp));
        }
    }


    /**
     * 根据时间戳得到日期字符串
     *
     * @param timeStamp   时间戳
     * @return
     */
    public static String getDateStrByTimeStamp(Long timeStamp) {
        String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(new Date(timeStamp));
        return date;
    }


    /**
     * 获取当前时间戳
     *
     * @return
     */
    public static Long currentInMillis() {
        // 获取当前日期
        Calendar calendar = Calendar.getInstance();
        return calendar.getTimeInMillis();
    }

    /**
     * 最近一周时间戳
     *
     * @return
     */
    public static Long lastWeekInMillis() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH) - 7, 0, 0, 0);
        return calendar.getTimeInMillis();
    }


    /**
     * @param time    统计时间戳
     * @param timeDim 时间纬度
     * @description: 根据时间纬度, 得到开始时间
     * @author: hepeng
     * @date: 2021/8/19
     * @return: Long
     */
    public static Long getStartTimeByDim(Long time, String timeDim) {
        if (TimeDimEnum.DAY.getTimeDim().equals(timeDim)) {
            return getDayStartTime(time);
        }
        if (TimeDimEnum.MONTH.getTimeDim().equals(timeDim)) {
            return getMonthStartTime(time);
        }
        if (TimeDimEnum.YEAR.getTimeDim().equals(timeDim)) {
            return getYearStartTime(time);
        }
        if (TimeDimEnum.ALL.getTimeDim().equals(timeDim)){
            return yearTimeInMillis();
        }
        return 0L;
    }


    /**
     * @param time    统计时间戳
     * @param timeDim 时间纬度
     * @description: 根据时间纬度, 得到结束时间
     * @author: hepeng
     * @date: 2021/8/19
     * @return: Long
     */
    public static Long getEndTimeByDim(Long time, String timeDim) {
        if (TimeDimEnum.DAY.getTimeDim().equals(timeDim)) {
            return getDayEndTime(time);
        }
        if (TimeDimEnum.MONTH.getTimeDim().equals(timeDim)) {
            return getMonthEndTime(time);
        }
        if (TimeDimEnum.YEAR.getTimeDim().equals(timeDim)) {
            return getYearEndTime(time);
        }
        return 0L;
    }

    /**
     * 根据时间戳,时间纬度,电站编号是否为空,得到日期字符串
     *
     * @param timeStamp   时间戳
     * @param timeDim     时间维度
     * @param stationCode 电站编号
     * @return
     */
    public static String getDateStrByTimeDimAndStationCode(Long timeStamp, String timeDim, String stationCode) {
        String date = "";
        if (StringUtils.isBlank(stationCode)) {
            // 列表
            if ("year".equals(timeDim)) {
                date = new SimpleDateFormat("yyyy", Locale.CHINA).format(new Date(timeStamp));
            } else if ("month".equals(timeDim)) {
                date = new SimpleDateFormat("yyyy-MM", Locale.CHINA).format(new Date(timeStamp));
            } else {
                date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(new Date(timeStamp));
            }
        } else {
            // 详情
            if ("year".equals(timeDim)) {
                date = new SimpleDateFormat("yyyy-MM", Locale.CHINA).format(new Date(timeStamp));
            } else if ("month".equals(timeDim)) {
                date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(new Date(timeStamp));
            } else {
                date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(new Date(timeStamp));
            }
        }
        return date;
    }

    /**
     * @param localDateTime 时间
     * @description: 根据LocalDateTime转换时间戳--毫秒
     * @author: hepeng
     * @date: 2021/8/19
     * @return: Long
     */
    public static Long getTimeStampMilliByLocalDateTime(LocalDateTime localDateTime) {
        long l = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();

        return l;
    }
    /**
     * @param localDateTime 时间
     * @description: 根据LocalDateTime转换时间戳--秒
     * @author: hepeng
     * @date: 2021/8/19
     * @return: Long
     */
    public static Long getTimeStampSecondByLocalDateTime(LocalDateTime localDateTime) {
        long l = localDateTime.toEpochSecond(ZoneOffset.of("+8"));

        return l;
    }
    /**
     * @param sLong 小的时间
     * @param mLong 大的时间
     * @description: 根据两个long型时间,计算间隔天数
     * @author: lijinghui
     * @date: 2021/11/8
     * @return: double
     */
    public static double getDayNumBetween(Long sLong,Long mLong){
        double dayNum =  (double)(mLong-sLong)/24/3600/1000;
        return dayNum;

    }

    /**
     * 日期格式字符串转换成时间戳 (毫秒)
     * @param date_str 字符串日期
     * @param format 如:yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static Long dateTimeStamp(String date_str,String format){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.parse(date_str).getTime();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_42287451

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

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

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

打赏作者

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

抵扣说明:

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

余额充值