系統當前有乙個會員到期提醒的功能。功能做的比較 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 ...