神奇的 時間 問題

2022-02-03 09:02:33 字數 1329 閱讀 2033

系統當前有乙個會員到期提醒的功能。功能做的比較 low, 臨近到期 7 天提醒一次,3 天提醒一次。 只在使用者那天第一次登入的時候提醒一下。

但是偶爾會有反饋說少一次提醒,要麼7天沒提醒,要麼3天的沒提醒。 反饋完,第二天 測試同學 拿到問題去驗證又沒問題。

客戶買會員至少都是年度的。這個操作實現太低頻了,所以雖然時有反饋,但一直沒關注。

直到這次,客戶的 7 天提醒和 3 天提醒都沒有。 然後直接把客戶的會員給斷了 。 客戶很怒啊!

客戶爸爸很生氣, 說確實沒收到提醒 。 第二天, 測試同學一上午都復現不出來 。 一頭霧水的時候。 吃完飯 , 下午問題出現了。

上午的時候,每次測試都會有提醒,無比正常 。

下午的時候每次測試都沒有提醒 , 無比的異常!。 詭異啊!

然後回想問題,好像每次都是客戶反饋完,第二天上午去復現問題 , 然後無比的正常。t - t

而恰好 , 客戶 7 天及之後的那幾天 , 都是在下午才登入 。下午就沒有提醒。

表現顯示,應該是時間判斷的問題。時間判斷的偽**:

....

long now = system.currenttimemillis(); //當前時間

long expire = user.getexpire(); // 使用者的過期時間的時間戳,是過期那天 23:59:59.999的時間戳

.....

//重點邏輯

//獲取 7 天後的最後時間

long ndayafter = getendtimedaysafter(now,7); // 7 天和 3 天是一樣的邏輯

//判斷時間

if(expire == ndayafter) else

........

//獲取 n 天後的最後時間

public long getendtimedaysafter(long time, int days)

就這麼一塊**邏輯 , 上午就對的,下午就不對!!

眼尖的同學可能已經發現問題了 。 沒錯, 就是下面這行邏輯的問題:

calendar.set(calendar.hour, 23); // 這個 hour 是12小時制的。
上午時間設定 23 ,得到的是 23點這個時間 。

下午時間設定 23 , 得到的是 第二天 的上午 11點的時間。

這個具體可以看: calendar.hour 和 calendar.hour_of_day

不知道當時寫**的人還活著不? 活著的話得好好上上課。

如果文章有幫助到您,請點個贊,您的反饋會讓我感到文章是有價值的

時間問題3

問題及 檔名稱 main.cpp 作 者 李磊濤 版 本 號 v1.0 問題描述 輸入時間輸出時間。輸入描述 時間時分秒和要增加的時分秒。程式輸出 時間時分秒。includeusing namespace std class time void time add a sec void time ad...

C 時間問題

datetime dt datetime.now 當前時間 datetime startweek dt.adddays 1 convert.toint32 dt.dayofweek.tostring d 本週周一 datetime endweek startweek.adddays 6 本週週日 d...

oracle 時間問題

今天用到oracle時間比較,看到網上也有很多,自己就總結了下啊 1,比較兩個時間的大小 也可以是字串表示時間 select from table where to date 欄位1,yyyy mm dd hh24 mi ss to date 2012 2 8 yyyy mm dd hh24 mi ...