Format 輸出與字串轉換

日期格式化

format()將Java Date/LocalDate物件轉換為對應字元格式;toFormat()則是將日期字串轉為指定FORMAT格式。 兩者通常用於使用者介面或報表輸出。因為以 NULL 表示沒有日期資料,是很普遍的用法,所以NULL物件一律轉換為空白字串“”,除非呼叫函式時傳入alterText字串。

String now()
* 適用於:**YYYMMDD, YYYMM, YYY**
* 以指定格式取得系統日期。
String format(date)
String format(date,alterText)
  • 適用於:YYYMMDD, YYYMM, YYY
  • 取得格式化日期字串。
  • 傳入date為NULL時,回傳空字串或(alterText)。
  • 與RocDateUtils.foramt差別在:
    • 若年度超出範圍 ( >999 或 < -99),顯示alterText或丟出RuntimeException。
    • 因為輸出長度異常文字,在實際應用時,可能會導致輸出版面錯亂或資料交換格式錯誤。
String String toFormat(String dateStr, String format)
* 適用於:**YYYMM**
* 將傳入的 年月字串解析後,改以指定FORMAT格式輸出。
  * NULL 及 空白字串以空白輸出。
  * 無法解析資料抛出Exception
String String toFormatOrElse (String dateStr, String format, String alterText)
* 適用於:**YYYMM**
* 將傳入的 年月字串解析後,改以指定FORMAT格式輸出。
  * NULL 及 空白字串**輸出替代文字**。
  * 無法解析資料**輸出替代文字**。

轉換西元年份格式

toAdFormat()將日期字串轉為指定西元年份yyyy-MM-dd/yyyy-MM/yyyy格式。 常用於使用者介面、報表輸出、或資料交換,所以採用對應原則:輸入NULL得NULL(render輸出需自行處理NULL顯示)、空白字串得空字串。無法解析的錯誤日期字串預設丟出EXCEPTION,也可以呼叫…OrElse/OrOrigin採用其它處理邏輯。

toAdFormat(String yyymmdd, Character separator)
toAdFormat(String yyy)
  • 適用於:YYYMMDD, YYYMM, YYY
  • 為 YYYMMDD 格式字串轉換為西元年月日,並可插入分隔字元。
    • YYYY${separator}MM${separator}DD
  • 為 YYYMMDD 格式字串轉換為西元年月,並可插入分隔字元。
    • YYYY${separator}MM
  • 為 YYYMMDD 格式字串轉換為西元年。
    • YYYY
toAdFormatOrElse(String yyymmdd, Character separator, String alterText)
toAdFormatOrElse(String yyy, String alterText)
  • 適用於:YYYMMDD, YYYMM, YYY
  • 同 toAdFormat,但NULL、空白字串及無法解析資料皆改以替代文字輸出。
toAdFormatOrOrigin(String yyymmdd, Character separator)
toAdFormatOrOrigin(String yyy)
  • 適用於:YYYMMDD, YYYMM, YYY
  • 同 toAdFormat,但NULL、空白字串及無法解析資料皆輸出原本文字。

String格式轉換(插入分隔字元)

有時原始資料只使用 7 碼,但業務需求輸出要求加上分割字元,insertSeparator() 針對此種格式差異進行轉換。 實務上同樣常用於使用者介面、報表輸出、或資料交換,所以也採用對應原則:輸入NULL得NULL(render輸出需自行處理NULL顯示)、空白字串得空字串。無法解析的錯誤日期字串預設丟出EXCEPTION,或者呼叫…Force/OrOrigin採用其它處理邏輯。

String insertSeparator(String yyymmdd, Character separator)
String insertSeparator(String yyymm, Character separator)
  • 適用於:YYYMMDD, YYYMM
  • 為 YYYMMDD 格式字串插入分隔字元。年份仍補’0’至3位;月份仍補’0’至2位。
  • 若要得到不補0的結果:應 parse 為JAVA Date物件後,再使用 RocDateUtils 轉換。
String insertSeparatorForce(String yyymmdd, Character separator)
String insertSeparatorForce(String yyymm, Character separator)
  • 適用於:YYYMMDD, YYYMM
  • 強制轉換模式
    • NULL輸出NULL。
    • 空白字串輸出同樣空白。
    • 無法解析資料則盡可能改以符合格式輸出(至少長度不大於預期長度)。
  • insertSeparatorForce () 的例外範例如下,超過預計長度者,會把後三碼改成…。
assertEquals("9", YYYMMUtils.insertSeparatorForce("9", '-'));
assertEquals("98", YYYMMUtils.insertSeparatorForce("98", '-'));
assertEquals("980", YYYMMUtils.insertSeparatorForce("980", '-'));
assertEquals("983-1", YYYMMUtils.insertSeparatorForce("9831", '-'));

assertEquals("098 01", YYYMMUtils.insertSeparatorForce("9801", ' '));
assertEquals("098/01", YYYMMUtils.insertSeparatorForce("9801", '/'));
assertEquals("098-01", YYYMMUtils.insertSeparatorForce("9801", '-'));
assertEquals("098-01", YYYMMUtils.insertSeparatorForce("09801", '-'));
assertEquals("098-01", YYYMMUtils.insertSeparatorForce("009801", '-'));

assertEquals( "A", YYYMMUtils.insertSeparatorForce("A", '-'));
assertEquals( "AB", YYYMMUtils.insertSeparatorForce("AB", '-'));
assertEquals( "ABC", YYYMMUtils.insertSeparatorForce("ABC", '-'));
assertEquals( "ABC-D", YYYMMUtils.insertSeparatorForce("ABCD", '-'));
assertEquals( "ABC-DE", YYYMMUtils.insertSeparatorForce("ABCDE", '-'));
assertEquals( "ABC...", YYYMMUtils.insertSeparatorForce("ABCDEF", '-'));
assertEquals( "ABC...", YYYMMUtils.insertSeparatorForce("ABCDEFG", '-'));
assertEquals("9", YYYMMDDUtils.insertSeparatorForce("9", '-'));
assertEquals("98", YYYMMDDUtils.insertSeparatorForce("98", '-'));
assertEquals("980", YYYMMDDUtils.insertSeparatorForce("980", '-'));
assertEquals("980-1", YYYMMDDUtils.insertSeparatorForce("9801", '-'));
assertEquals("980-10", YYYMMDDUtils.insertSeparatorForce("98010", '-'));
// 後4碼不符合日期格式,無法分析 & 強制輸出。
assertEquals("989-90-1", YYYMMDDUtils.insertSeparatorForce("989901", '-'));
// 5~6位數字,且後4碼符合日期格式,前方補 0 輸出。
assertEquals("-08-01-01", YYYMMDDUtils.insertSeparatorForce("-80101", '-'));
assertEquals("098-01-01", YYYMMDDUtils.insertSeparatorForce("980101", '-'));
assertEquals("098-08-01", YYYMMDDUtils.insertSeparatorForce("0980801", '-'));
// 7位以上數字,若前方為0,把0消掉後處理。
assertEquals("098-01-01", YYYMMDDUtils.insertSeparatorForce("00980101", '-'));
assertEquals("-98-01-01", YYYMMDDUtils.insertSeparatorForce("-00980101", '-'));
//
assertEquals("109-80...", YYYMMDDUtils.insertSeparatorForce("10980101", '-'));
assertEquals("A", YYYMMDDUtils.insertSeparatorForce("A", '-'));
assertEquals("AB", YYYMMDDUtils.insertSeparatorForce("AB", '-'));
assertEquals("ABC", YYYMMDDUtils.insertSeparatorForce("ABC", '-'));
assertEquals("ABC-D", YYYMMDDUtils.insertSeparatorForce("ABCD", '-'));
assertEquals("ABC-DE", YYYMMDDUtils.insertSeparatorForce("ABCDE", '-'));
assertEquals("ABC-DE-F", YYYMMDDUtils.insertSeparatorForce("ABCDEF", '-'));
assertEquals("ABC-DE-FG", YYYMMDDUtils.insertSeparatorForce("ABCDEFG", '-'));
assertEquals("ABC-DE...", YYYMMDDUtils.insertSeparatorForce("ABCDEFGH", '-'));
String insertSeparatorOrOrigin(String yyymmdd, Character separator)
String insertSeparatorOrOrigin(String yyymm, Character separator)
  • 適用於:YYYMMDD, YYYMM
  • 強制轉換模式
    • NULL輸出NULL。
    • 空白字串輸出同樣空白。
    • 無法解析資料輸出原本文字。

results matching ""

    No results matching ""