@JsonFormat和@DateTimeFormat註解的用法

使用背景

   看到Format 很容易知道就是格式轉換,那麼,轉換的場景只有兩個:一、讀庫 查詢數據庫 返回時間類型的信息到前臺。二:存庫 前臺傳給後臺,然後存數據庫。不管是哪一種,根據業務需求,肯定會有時間格式 不一致問題,那麼轉換方法肯定不是唯一的。比如 mysql 有一個函數 DATE_FORMAT(),也可以是java實現轉換(simpleDateFormat),這裏就只說這兩個註解,怎麼用。

@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;

注:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

          pattern:是你需要轉換的時間日期的格式

          timezone:是時間設置爲東八區,避免時間在轉換中有誤差

解決問題:後臺到前臺時間格式保持一致。注意 屬性類型是Date

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;

 解決問題:@DataFormAT主要是前後到後臺的時間格式的轉換

拓展一下:關於mysql中 date、datetime、timestamp三者間的區別

date和datetime、timestamp的區別
date保存精度到天,格式爲:YYYY-MM-DD
datetime和timestamp精度保存到秒,格式爲:YYYY-MM-DD HH:MM:SS

datetime 和timestamp
兩者都是時間類型字段,格式都一致。兩者主要有以下幾點區別:


datatime設置的是什麼時間就是什麼時間;timestamp則是把客戶端插入的時間從當前時區轉化爲UTC(世界標準時間)進行存儲。查詢時,將其又轉化爲客戶端當前時區進行返回。  

佔用存儲空間不同。timestamp儲存佔用4個字節,datetime儲存佔用8個字節。

可表示的時間範圍不同。timestamp可表示範圍:1970-01-01 00:00:00~2038-01-09 03:14:07,datetime支持的範圍更寬1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

索引速度不同。timestamp更輕量,索引相對datetime更快。

如果數據庫中類型爲datetime,而返回類型是string類型。會出現 返回數據 會多出“.0” 例如:2019-10-16 17:57:35.0。

這裏貼一下 簡單的java使用simpleDateFormat轉換的工具類 

public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";

	public static Date strToDate(String dateTimeStr,String formatStr){
		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
		return dateTime.toDate();
	}

	public static String dateToStr(Date date,String formatStr){
		DateTime dateTime = new DateTime(date);
		return dateTime.toString(formatStr);
	}

	public static Date strToDate(String dateTimeStr){
		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
		return dateTime.toDate();
	}

	public static String dateToStr(Date date){
		DateTime dateTime = new DateTime(date);
		return dateTime.toString(STANDARD_FORMAT);
	}

	/**
	 * 由時間戳轉爲YYYY-MM-DD格式的日期
	 * @param time
	 */
	public static String getYmdDate3(long time){
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(STANDARD_FORMAT);
		return simpleDateFormat.format(new Date(Long.valueOf(time)));
	}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章