最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)換的評論 (共 條)

分享到微博請遵守國家法律
蚌埠市| 铜山县| 西峡县| 黔南| 永德县| 金沙县| 石首市| 乐平市| 老河口市| 咸丰县| 隆尧县| 白城市| 六安市| 东乡县| 西藏| 棋牌| 三穗县| 辛集市| 梅州市| 沾化县| 清水县| 伊春市| 临澧县| 都匀市| 垣曲县| 牟定县| 北京市| 陆丰市| 舟曲县| 叶城县| 隆林| 榆中县| 玉溪市| 阿拉善盟| 五莲县| 谢通门县| 阳江市| 西安市| 博湖县| 赤峰市| 钟祥市|