1. 程式人生 > >springboot+mybatis+thymeleaf關於前後臺日期格式化問題總結

springboot+mybatis+thymeleaf關於前後臺日期格式化問題總結

首先資料庫欄位是:date和datetime型別

對應的mybatis對映檔案的jdbcType是DATE和TIMESTAMP

第一個問題:表單提交資料含date型別的引數

如果後臺不做任何處理的話會直接報錯,大概意思是字串String不能轉化為Date型別

方法一:在啟動類加入格式化程式碼,該方法相容三種類型格式的引數,其他格式稍作修改即可

private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
    private static final String shortDateFormat = "yyyy-MM-dd";
    
	@Bean
    public Converter<String, Date> addNewConvert() {
        return new Converter<String, Date>() {
            @Override
            public Date convert(String value) {
            	if("".equals(value) || value == null) {
            		return null;
            	}
            	
            	value = value.trim();
            	
            	try {
                    if(value.contains("-")) {
                        SimpleDateFormat formatter;
                        if(value.contains(":")) {
                            formatter = new SimpleDateFormat(dateFormat);
                        }else {
                            formatter = new SimpleDateFormat(shortDateFormat);
                        }

                        Date dtDate = formatter.parse(value);
                        return dtDate;              
                    }else if(value.matches("^\\d+$")) {
                        Long lDate = new Long(value);
                        return new Date(lDate);
                    }
                } catch (Exception e) {
                    throw new RuntimeException(String.format("parser %s to Date fail", value));
                }
                throw new RuntimeException(String.format("parser %s to Date fail", value));
             
            }
        };
    }

這種方法的結果是:

優點: 在用thymeleaf模板的時候,在前臺頁面 我可以根據頁面的需要隨意的格式化成想要的顯示效果

缺點:在介面訪問的時候,比如postman測試介面,這個時候時間會直接顯示為一個時間戳 


問題二:讀取資料的時候時間格式不對,顯示的是時間戳,或者是國際格式的時間;對於時間戳解決方法

解決方法:在bean類中對應的屬性上加上註解
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+5:30")

pattern是格式累心,timezone是時間偏移量;我的專案應用於印度市場所有時間偏移量是+5:30,北京時間是+8

這種方法在介面測試中有用,在thymeleaf裡面無效,用#dates.format(date,'yyyy-MM-dd hh:mm:dd')格式也無效

方法二:直接將bean類的對應屬性的型別改為String型別;

優點:表單提交的時候  後臺不需要做任何處理,可以直接接受string引數

缺點:1.比如是一個datetime型別的,頁面顯示不要時分秒了   就得單獨對其進行格式化

           2.假如需要對時間進行計算(比如計算兩個時間差),又得重新轉型別

權衡利弊,根據實際情況取捨吧;

平時做專案的時候遇到幾次,記錄的時候一下子也想不到所有情況,如有補充,敬請留言