1. 概述
在使用 FineReport 進行視覺化展示時,經常會需要對日期資料進行處理,本文介紹幾種日期型別資料的處理應用場景。
2. 獲取月份或日期的時候顯示 2 位
2.1 問題描述
在使用公式month()或者是day()時,如果月份或日期是一位數,則顯示出來的也只有一位數,比如說 1 月 9 號,獲取月份時顯示的是 1,而不是 01,獲取日期時,顯示的是 9,而不是 09,如果需要獲取到 01 或者是 09,這個該如何透過公式實現呢?
2.2 解決方案
透過公式或者自訂函式實現。
2.3 操作步驟
2.3.1 公式實現
1)使用 RIGHT、CONCATENATE、MONTH 組合函式實現。
例如顯示當前時間(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 時數字有可能出錯。