无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

springboot 多種時間格式轉(zhuǎn)換

2022-12-21 23:09 作者:萬事俱備就差個程序員  | 我要投稿

我們知道,springboot 有個配置時間格式的參數(shù):spring.jackson.date-format。

通常使用方式是:

spring: ?jackson: ? ?date-format: yyyy-MM-dd HH:mm:ss

如果我需要傳 yyyy-MM-dd 格式的話,那就只能再加個 @JsonFormat 注解來為它單獨指定格式。有沒有更方便的辦法呢?

? spring.jackson.date-format幫我們做了什么?

到源碼中可以看到,date-format 原本應該是接收一個 DateFormat 的類路徑的,但我們一般寫的是一個時間格式字符串,所以默認使用的 DateFormat 的子類 SimpleDateFormat 來為我們轉(zhuǎn)換時間格式。其實我們大可以傳一個自定義的 DateFormat 類進去。

Untitled.png

?? 既然方案找到了,那么實現(xiàn)起來就很簡單了,我們自定義一個類,繼承 DateFormat,但實際上,如果直接繼承 DateFormat 抽象類,你可能還需要像 SimpleDateFormat 一樣,在里面需要自己初始化一堆復雜的參數(shù),其實我們需要的僅僅是讓它支持多種時間格式,而 SimpleDateFormat 已經(jīng)為我們做好了這一切,不同的只是需要我們?yōu)樗付ú煌母袷筋愋?,所以,可以直接繼承 SimpleDateFormat,然后重寫它的 parse 和 format 方法即可達到我們的目的。

package com.yc.kfpt.webcommons.plugin;import java.text.DateFormat;import java.text.FieldPosition;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;/** * 支持多種時間格式轉(zhuǎn)換,使用方法 * <code> * spring: * ? jackson: * ? ? date-format: com.yc.kfpt.webcommons.plugin.DateFormatPlugin * </code> * @author 敖癸 * @formatter:on * @since 2022/11/4 */public class DateFormatPlugin extends SimpleDateFormat { ? ?private static final List<DateFormat> FORMATS = new ArrayList<>(5); ? ?private static final String YYYY_MM = "^\\d{4}-\\d{1,2}$"; ? ?private static final String YYYY_MM_DD = "^\\d{4}-\\d{1,2}-\\d{1,2}$"; ? ?private static final String YYYY_MM_DD_HH_MM = "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}$"; ? ?private static final String YYYY_MM_DD_HH_MM_SS = "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$"; ? ?private static final String YYYY_MM_DD_HH_MM_SS_SSS = "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}\\.\\d{3}$"; ? ?static { ? ? ? ?FORMATS.add(new SimpleDateFormat("yyyy-MM")); ? ? ? ?FORMATS.add(new SimpleDateFormat("yyyy-MM-dd")); ? ? ? ?FORMATS.add(new SimpleDateFormat("yyyy-MM-dd HH:mm")); ? ? ? ?FORMATS.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); ? ? ? ?FORMATS.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")); ? ?} ? ?@Override ? ?public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { ? ? ? ?return FORMATS.get(3).format(date, toAppendTo, fieldPosition); ? ?} ? ?@Override ? ?public Date parse(String source, ParsePosition pos) { ? ? ? ?String value = source.trim(); ? ? ? ?if ("".equals(value)) { ? ? ? ? ? ?return null; ? ? ? ?} ? ? ? ?if (source.matches(YYYY_MM)) { ? ? ? ? ? ?return FORMATS.get(0).parse(source, pos); ? ? ? ?} else if (source.matches(YYYY_MM_DD)) { ? ? ? ? ? ?return FORMATS.get(1).parse(source, pos); ? ? ? ?} else if (source.matches(YYYY_MM_DD_HH_MM)) { ? ? ? ? ? ?return FORMATS.get(2).parse(source, pos); ? ? ? ?} else if (source.matches(YYYY_MM_DD_HH_MM_SS)) { ? ? ? ? ? ?return FORMATS.get(3).parse(source, pos); ? ? ? ?} else if (source.matches(YYYY_MM_DD_HH_MM_SS_SSS)) { ? ? ? ? ? ?return FORMATS.get(4).parse(source, pos); ? ? ? ?} else { ? ? ? ? ? ?throw new IllegalArgumentException("Invalid datetime value " + source); ? ? ? ?} ? ?}}

最后,我們再修改我們的配置,把 spring.jackson.date-format 指定我們自定義的DateFormat 子類。

spring: ?jackson: ? ?date-format: com.yc.kfpt.webcommons.plugin.DateFormatPlugin

如此,我們就能同時支持前端傳過來的各種時間格式了,我們只需要用 Date 接收,剩下的就都交給 DateFormat 來幫我們完成了。



作者:DimonHo
鏈接:https://www.jianshu.com/p/12b47cffd3ad
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。


springboot 多種時間格式轉(zhuǎn)換的評論 (共 條)

分享到微博請遵守國家法律
金溪县| 长泰县| 双鸭山市| 铅山县| 依安县| 温泉县| 甘肃省| 利津县| 延长县| 苍梧县| 临朐县| 磴口县| 伊春市| 资中县| 乌苏市| 锦屏县| 霍城县| 丁青县| 剑河县| 栾川县| 百色市| 南和县| 绵竹市| 右玉县| 九龙坡区| 锦州市| 荥经县| 义马市| 稻城县| 铜鼓县| 东港市| 鄂托克前旗| 从化市| 天峻县| 永康市| 龙川县| 濮阳县| 上犹县| 四会市| 察隅县| 增城市|