我正在嘗試解決這個問題,但我找不到一個好的解決方案。當用戶在我的網站上注冊時,除其他資料外,我會詢問生日日期。除了生日日期,我還想在資料庫中添加用戶的實際年齡,為此,我使用了以下代碼(添加到 User.java 類中):
private LocalDate dateOfBirth;
private int actualAge = ageCalculator(dateOfBirth);
public int ageCalculator(LocalDate data) {
LocalDate d = LocalDate.now();
if(data != null) {
return Period.between(data, d).getYears();
}else {
return //error message;
}
}
問題是這段代碼正好在用戶在網站上注冊的時候作業。例如:假設明天我將 30 歲,今天我在網站上注冊(我仍然 29 歲)。因此,在資料庫中將添加年齡“29”。但是明天我就30歲了,資料庫上的年齡還是29歲。有沒有辦法自動更新年齡?我正在考慮使用查詢來獲取每個用戶的生日日期 - 按月 - 并更新年齡。讓我更好地解釋一下:現在我們在六月,所以通過查詢我將選擇所有六月出生的用戶,如果他們的生日月份和日期與 LocalDate.now 的月份和日期相同(),那我把年齡加1。你有什么建議嗎?感謝您的幫助/建議。
uj5u.com熱心網友回復:
您不應該存盤年齡,因為它總是在變化。每次查詢人員資訊時都應計算年齡。您已經有了 Java 解決方案,您也可以使用 SQL 來完成。
uj5u.com熱心網友回復:
這并不理想,但由于您似乎真的需要這樣做,您可以使用 Spring @Scheduler 注釋并創建一個調度程式,該調度程式將每 24 小時運行一次,獲取每個用戶的年齡和生日。然后,您可以像您提到的那樣比較日期,使用:
Period.between(birthday, now).getYears();
如果結果與年齡列相同,則不執行任何操作。如果不是,請更新年齡。
uj5u.com熱心網友回復:
幾年前我在 FoxPro 中寫了這個,但你應該能夠遵循邏輯
function get_age
parameters dob_in
private m.age_
m.age_ = year(m.GItoday) - year(dob_in)
do case
case month(dob_in) > month(m.GItoday)
m.age_ = m.age_ - 1
case month(dob_in) = month(m.GItoday)
if day(dob_in) > day(m.GItoday)
m.age_ = m.age_ - 1
endif
endcase
return m.age_
您不僅要考慮年份,還要考慮月份和日期。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/496080.html
