Java 連續簽到天數和簽到記錄是一項非常常見的需求。這通常需要我們在系統中記錄用戶簽到的信息,并在用戶每次簽到后進行相應的處理,包括更新用戶簽到天數、記錄用戶簽到時間等。在 Java 中,我們可以通過使用 Map 、List 等數據結構來記錄這些信息。
// 記錄用戶簽到信息的 Map
Map<String, List<Date>> signInRecord = new HashMap<>();
// 獲取用戶的簽到記錄
List<Date> recordList = signInRecord.get(userId);
if (recordList == null) {
recordList = new ArrayList<>();
signInRecord.put(userId, recordList);
}
// 添加當前簽到時間
recordList.add(new Date());
// 計算用戶連續簽到天數
int continuity = 0;
if (recordList.size() >1) {
Date currentDate = recordList.get(recordList.size() - 1);
Date lastDate = recordList.get(recordList.size() - 2);
long interval = currentDate.getTime() - lastDate.getTime();
if (interval / 1000 / 60 / 60 / 24 == 1) {
continuity = 1;
for (int i = recordList.size() - 2; i >= 0; i--) {
currentDate = recordList.get(i);
lastDate = recordList.get(i + 1);
interval = currentDate.getTime() - lastDate.getTime();
if (interval / 1000 / 60 / 60 / 24 == 1) {
continuity++;
} else {
break;
}
}
}
}
在上面的代碼中,我們首先定義了一個 Map 來記錄用戶的簽到信息,鍵為用戶 Id,值為該用戶的簽到記錄列表。在用戶每次簽到后,我們將當前時間添加到列表中,并計算用戶當前的連續簽到天數。
為了計算用戶的連續簽到天數,我們使用了一個循環遍歷用戶的簽到記錄列表,并比較相鄰兩個簽到日期的間隔是否為 1 天。如果相鄰兩個簽到日期的間隔為 1 天,則說明用戶連續簽到了一天,連續簽到天數加 1。否則,跳出循環,并返回計算好的連續簽到天數。