历史版本23 :日期函数应用 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

在使用 FineReport 进行可视化展示时,经常会需要对日期数据进行处理,本文介绍几种日期类型数据的处理应用场景。

2. 获取月份或日期的时候显示 2 位编辑

2.1 问题描述

在使用公式month()或者是day()时,如果月份或日期是一位数,则显示出来的也只有一位数,比如说 1 月 9 号,获取月份时显示的是 1,而不是 01,获取日期时,显示的是 9,而不是 09,如果需要获取到 01 或者是 09,这个该如何通过公式实现呢?

2.2 解决方案

通过公式或者自定义函数实现。

2.3 操作步骤

2.3.1 公式实现

1)使用 RIGHTCONCATENATEMONTH 组合函数实现。

例如显示当前时间(2021-08-31)对应的月份和天数且以两位数字显示。

在单元格分别输入:

月份公式:=right(concatenate('0',month(today())),2)

天数公式:=right(concatenate('0',day(today())),2)

公式说明:

公式
说明

concatenate('0',month(today()))

concatenate('0',day(today()))

通过 concatenate 将获取到的月份或者天数前面拼接一个 0,比如说 11 月,则显示 011,如果是 2 月,则显示 02;如果是 31 号,则显示 031

right(concatenate('0',month(today())),2)

right(concatenate('0',day(today())),2)

通过 right 方法,获取右边的 2 位数字,比如说 2 月,截取 2 位数字,则为 02,比如 12 月,截取右边的两位,则为 12;比如 31号,则截取右边的两位 31

效果查看:

2)通过 FORMAT 来格式化字符串。

在单元格分别输入:

月份公式:=FORMAT(MONTH("2021-08-31"), "00")

天数公式:=FORMAT(day("2021-08-31"), "00")

公式说明:

公式
说明

MONTH("2021-08-31")

day("2021-08-31")

返回月份数字:8

返回天数数字:31

FORMAT(MONTH("2021-08-31"), "00")

FORMAT(day("2021-08-31"), "00")

返回 format 格式,也就是

效果查看:

2.3.2 自定义函数实现

如果觉得公式比较复杂,则可以通过自定义函数实现,代码如下:

package com.fr.function;
import com.fr.script.AbstractFunction;
public class Add0 extends AbstractFunction {      
    public Object run(Object[] args) {      
        String result = args[0].toString();      
        if(result.length() == 1)    
            result = '0' + result;    
        return result;   
    }
}

自定义函数的详细定义步骤请参照 自定义函数

3. 利用日期函数生成特定编号编辑

有些情况下需要生成特定字符且带「年月日时分秒」这样的字符串,类似 china20170726144516 这样的编号,可以直接利用时间公式字符串拼接函数来实现。

在单元格中写入公式:="china" + FORMAT(now(), "yyyMMddhhmmss") 结果为:china20180101124516,即字符串“china”后面加当前的「年月日时分秒」。

注:一般编号非必要的情况下,不要全用数字,因为在导入导出到 EXCEL 时数字有可能出错。