使用背景:
看到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)));
}