記一次關於使用Date型別查詢的毫秒級誤差

2021-08-31 23:33:30 字數 1411 閱讀 1944

最近公司提了個需求,要求在每半小時執行一次定時任務,根據時間節點,每半點查詢一次資料庫。

egg:2018-11-14 11:30:00

一開始的做法:

private final static long halfhour = 30 * 60 * 1000;
long time = system.currenttimemillis();

time += halfhour;

date systemdate = new date(time);

這樣得出來的資料,直接列印在控制台是

wed nov 14 11:30:00 cst 2018

測試的時候因為沒有辦法獲取整半點的時間,就通過******dateformat坐了下來轉換

string str = "2018-11-14 11:30:00";

******dateformat ******dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss");

date parse = ******dateformat.parse(str);

通過上述轉換,測試時可以準確的查到資料庫的資訊。這樣把定時任務封裝好後,時間一到,尷尬了,資料庫查詢出來的資料為空。於是查詢日誌,列印出來的時間同樣是 wed nov 14 11:30:00 cst 2018。

仔細看了一遍**後發現,system.currenttimemillis();該方法獲取的是當前系統時間,精確到毫秒級。開啟debug,在擼了一遍程式,日誌看出,獲取的時間戳為整半點的之後幾十毫秒!!!

難道是因為這幾十毫秒影響了我的查詢結果嗎?帶著疑問,將獲取的時間通過******dateformat進行轉換。

private final static long halfhour = 30 * 60 * 1000;
long time = system.currenttimemillis();

time += halfhour;

date systemdate = new date(time);

******dateformat ******dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss");

string format = ******dateformat.format(systemdate);

date date = ******dateformat.parse(format);

這樣轉換過來的時間,忽略了毫秒,精度在秒上,等於是沒有了那幾十毫秒到的誤差。

還有乙個遺留問題,關於控制台列印資訊兩次一樣的結果問題,是因為date型別直接做了型別轉換,精確度不顯示毫秒。

記一次sql查詢

效果圖 要查詢出如上圖的效果 知識點.1.多表巢狀查詢.2.輸出查詢結果,group concat函式 3.關聯查詢 select t1.學校,case when t1.年級 2017 then 1年級 when t1.年級 2016 then 2年級 when t1.年級 2015 then 3年...

記一次複雜查詢

專案中有乙個需求,查出使用者取出,充值次數,金額,使用者名稱,金幣的總量和每局遊戲的盈虧等做乙個統計,而他們分布在個表中,分別是使用者表,使用者取出表,使用者充值表,每局遊戲表中。首先想到的就是要分組查詢,group by user.userid.因為有的使用者有充值記錄但不一定有取出記錄,所以需要...

記一次muse ui 使用

vue init webpack test musenpm i muse ui snpm i babel plugin import less less loader d然後,將.babelrc的 plugins 裡面新增一段 裡面的 plugins import 在使用的時候出現過乙個問題,專案本...