用Calendar中的add()方法对时间加减,获取时间范围,读取动态数据字典。

项目中用到了,整理记录一下。内容如下:

目录

1、思路:

 2、函数对应编号具体示例如下:​编辑

 3、示例代码:

4、可配置时间数据字典 -代码示例


1、思路:

将获取的某个值设置为Calendar实例对象的值,并已该时间为截止时间,读取设置的数据字典或手动设置减去某个值,作为起始时间,以上为时间范围条件进行搜索查询。

Calendar.add()方法中的参数含义:

第一个参数:

如果是1是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作。

第二个参数:

则是加或者减指定的 ///////毫秒

 2、函数对应编号具体示例如下:

不同的应用场景,所对应的编号也有区别

 

 3、示例代码:

该部分代码是新建calendar实例对象后,将传过来的faultTime先设置为截止时间,然后通过Calendar.add()函数,对日历实例进行时间加减操作,此部分代码中是通过调用可配置的数据字典读取固定的时间进行加减,最后将处理后的时间再作为起始时间,这样就获得了时间范围中的起始时间-截止时间

Calendar calendar = Calendar.getInstance();

  //将calendar设置为传过来的故障时间
calendar.setTime(radioSelcetVo.getFaultTime());
            
//将calendar的故障时间作为截止时间
radioSelcetVo.setEndTime(calendar.getTime());
            
//在calendar设置的故障时间的基础上读取数据字典配置,减去6秒            
calendar.add(Calendar.SECOND, -CustomTime.ANALYSIS_REPORT);

//上面这句代码的结果如下一样,即当前日历实例减去6秒
//calendar.add(Calendar.SECOND, -6);
            
radioSelcetVo.setStartTime(calendar.getTime());

4、可配置时间数据字典 -代码示例

上述代码中的可配置数据字典(CustomTime.ANALYSIS_REPORT)代码如下,可参考:

 T_TRAIN=10;
  REPLAY_WIDTH=6;
  UM_T6=20

三个静态常量,然后读取数据库中的时间配置数据,然后动态刷新覆盖该参数值。


@Component
@Slf4j
public class CustomTime implements CommandLineRunner {
    public static Integer T_TRAIN=10;
    public static Integer REPLAY_WIDTH=6;
    public static Integer UM_T6=20;
    /**
     * 添加故障管理中分析报告,查询时间字典,以秒为单位,默认6秒
     */
    public static Integer ANALYSIS_REPORT=6;

    @Autowired
    ISysDictTypeService sysDictTypeService;

    @Autowired
    ISysDictService sysDictService;

    @Override
    public void run(String... args) {
        log.info("时间配置存储");
        SysDictType sysDictType = sysDictTypeService.getOne(
                new LambdaQueryWrapper<SysDictType>()
                        .eq(SysDictType::getType,"time")
                        .last("limit 1")
        );
        if(sysDictType!=null) {
            List<SysDict> sysDictList = sysDictService.list(
                    new LambdaQueryWrapper<SysDict>()
                            .eq(SysDict::getTypeId, sysDictType.getId())
                            .eq(SysDict::getStatus,1)
            );
            for(SysDict sysDict:sysDictList){
                if (sysDict.getDictKey().equals("ttrain")) {
                    T_TRAIN = Integer.parseInt(sysDict.getDictValue());
                }
                if (sysDict.getDictKey().equals("replay_width")) {
                    REPLAY_WIDTH = Integer.parseInt(sysDict.getDictValue());
                }
                if (sysDict.getDictKey().equals("um_t6")) {
                    UM_T6 = Integer.parseInt(sysDict.getDictValue());
                }
                if (sysDict.getDictKey().equals("analysis_report")){
                    ANALYSIS_REPORT = Integer.parseInt(sysDict.getDictValue());
                }
            }
        }
    }
}

-------------------------------------以下无正文-----------------------------------------------------------

注:仅供学习,记录问题和参考,共勉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值