mysql毫秒數引發的問題

2022-03-07 10:47:19 字數 1576 閱讀 6265

起因:最近同事在做定時打卡的東西,遇到乙個詭異的問題,端只是傳了乙個開始時間跟打卡週期,剩下的打卡時間都是由服務端自己生成的,顯示的截止時間有的變成23:59:59. 有時候又變成了 00:00:00,沒有找到原因,讓幫忙找一下原因,之前沒有遇到過這種情況,一時來了興趣。

**:

通過編寫單元測試,過程並沒有出錯,入庫的時候時間確實是23:59:59,入庫之後就變了,相關測試**如下

@autowired

private jdbctemplate jdbc;

@test

public void timetest());

}/**

* 獲取某個日期的時刻點,如2017-02-01的18:00:00

* @param date 開始日期

* @param hour 時

* @param minute 分

* @param second 秒

* @return

*/public static date getdateinday(date date, int hour, int minute, int second)

資料庫結果:

1	2019-05-23 23:59:59

2 2019-05-24 00:00:00

3 2019-05-24 00:00:00

4 2019-05-24 00:00:00

5 2019-05-23 23:59:59

但是在開發庫沒有出現這種現象,部署到測試環境就出現這種現象了,其中開發庫mysql5.6版本,測試庫使用的5.7版本。初步推斷是由於資料庫版本不一樣,對時間處理的不一樣導致的,但是具體細節是什麼,最終決定去翻閱一下mysql官方的說明文件,終於找到了答案。

從這篇fractional seconds in time values中我們看到5.6.4之前的版本中是不儲存毫秒數的,那麼高版本中是如何處理的?

從這篇conversion between date and time types中我們看到毫秒數在低於500的時候會捨棄掉,大於等於500會進製,類似四捨五入,既然找到問題的本質原因,那麼解決起來也比較方便了,只需要設定一下日期的毫秒數就能得到有效解決,修改如下:

public static date getdateinday(date date, int hour, int minute, int second)
總結:從這個小問題中,個人最大的感受就是官方api的重要性,對於開發用到的工具、技術要多多關注官方refrence,和release note,看看新加了哪些新特性,優化了哪些內容,修復了哪些bug。

mysql毫秒數引發的問題

起因 最近同事在做定時打卡的東西,遇到乙個詭異的問題,端只是傳了乙個開始時間跟打卡週期,剩下的打卡時間都是由服務端自己生成的,顯示的截止時間有的變成23 59 59.有時候又變成了 00 00 00,沒有找到原因,讓幫忙找一下原因,之前沒有遇到過這種情況,一時來了興趣。通過編寫單元測試,過程並沒有出...

mysql 獲取系統時間(毫秒數)

sql語句 select time to sec now now current timestamp replace unix timestamp current timestamp 3 執行結果 優化版 最後乙個,就是你想要的系統毫秒數了 獲取已知日期的時間毫秒數 select unix time...

MySQL儲存毫秒資料的方法

有相當一部分剛接觸到 mysql 的朋友都遇到這樣乙個相同的問題,就是關於毫秒的儲存與顯示。由於mysql資料型別中只提供了datetime,timestamp,time,date,year這幾種時間型別,而且datetime 以及 timestamp 的最小單位是秒,沒有儲存毫秒級別的函式。不過m...