润乾报表v4-自定义函数计算两个日期之间的假期数

本文介绍了如何在润乾报表v4中通过自定义函数解决计算两个日期间工作天数的问题。作者提出反向思考,先获取日期间的总天数和假期天数,再进行相减操作。文章提供了实现思路,包括创建获取日期后一天的函数、判断日期是否为周末的函数,并展示了部分关键代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

客户要求计算两个日期之间的工作天数,几经周折之下想到了一个反过来计算的方法,为什么不求出两个日期之间的假期和两个日期之间的实际天数,然后来进行相减操作呢?

 

解决方法:

由于函数不包含计算假期的函数,所以得通过自定义函数实现

 

主要思路:

1写一个获得日期的下一天的函数

2 写一个判断日期是否周末的函数

3 通过两个数组(a 特殊周末数组  b 国家假期数组)来对起始日期到结束日期的循环遍历判断是否属于这两个数组

 

部分代码:

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

 

public class hlDay {

      /**

      * 获得指定日期的后一天

      * @param cal

      * @return

      */

public  static String getNextDay(String cal, int i){

      Calendar c = Calendar.getInstance();

      Date date=null;

      try {

           date = new SimpleDateFormat(“yyyy/MM/dd”).parse(cal);

      } catch (ParseException e) {

      e.printStackTrace();

      }

      c.setTime(date);

      int day=c.get(Calendar.DATE);

      c.set(Calendar.DATE,day+i);

 

      String dayAfter=new SimpleDateFormat(“yyyy/MM/dd”).format(c.getTime());

      return dayAfter;

}

//判断是否是周末

public static boolean isWeekend(String cal) {

      Calendar c = Calendar.getInstance();

      Date date=null;

      try {

           date = new SimpleDateFormat(“yyyy/MM/dd”).parse(cal);

      } catch (ParseException e) {

           e.printStackTrace();

      }

      c.setTime(date);

      if(c.get(Calendar.DAY_OF_WEEK)-1 == 0 || c.get(Calendar.DAY_OF_WEEK)- 1 == 6) {

           return true;

      } else{

           return false;

      }

}

### 关于乾报表 V4 中输入参超出下拉据集范围时的默认值设置 在乾报表 V4 的设计中,如果希望实现当输入参不在下拉据集中时自动设置默认值的功能,可以通过以下方式来完成: #### 使用条件判断逻辑 可以在脚本部分编写自定义逻辑,通过 `if` 条件语句检测输入参是否存在于指定的据集中。如果不满足,则为其分配一个默认值。 例如,在 Java 或类似的脚本环境中可以这样操作: ```java String inputValue = getParameter("inputParam"); // 获取输入参 boolean isExist = false; for (Object row : dataSet) { // 遍历据集中的每一行 String valueInDataSet = ((Map)row).get("DEGREE").toString(); // 假设字段名为 DEGREE if (valueInDataSet.equals(inputValue)) { isExist = true; // 如果找到匹配项则标记存在 break; } } if (!isExist) { // 若未找到匹配项 setParameter("inputParam", "defaultValue"); // 设置默认值 } ``` 上述代码片段展示了如何遍历据集并验证输入参是否存在[^2]。如果没有发现对应的记录,则会调用 `setParameter` 函将该参重置为预定义的默认值。 #### 利用 SQL 查询过滤机制 另一种方法是在查询阶段利用 SQL 的特性处理此情况。比如采用如下形式的 DELETE 语句前加入额外筛选条件确保只影响有效范围内项目[^1]: ```sql DELETE itab FROM n1 TO n2 WHERE condition AND input_param IN (SELECT DISTINCT degree_column FROM dataset_table); ``` 这里增加了附加子查询 `(SELECT DISTINCT ...)` ,用来限定允许的操作对象仅限那些属于合法选项集合内的成员们。对于不符合这些标准的情况,默认不会执行任何动作从而间接实现了忽略非法请求的效果。 综上所述,无论是前端界面控制还是后台据库层面都可以采取措施应对这种需求场景下的特殊状况管理问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值