2012-03-29 56 views
1

嗨我的web應用程序中的每個人都生成了一個驗證碼,用戶可以輸入驗證碼進行帳戶激活。我希望生成的驗證碼在特定時間段內有效,例如12小時或24小時。我在生成代碼時存儲了日期和時間的詳細信息,但我如何檢查有效性意味着假設用戶輸入了代碼,如何檢查他是否在驗證期間輸入了代碼?如何比較日期和時間?謝謝在java中的有效性比較

+0

目前尚不清楚問題實際是什麼。我只是使用標準日期/時間函數將生成的時間和輸入的時間轉換爲具有減法運算符的格式,該運算符返回秒。究竟發生了什麼問題? – 2012-03-29 12:33:05

+0

我的問題是,當用戶註冊到站點系統生成一個有效的代碼,說12或24小時。我想確保用戶在驗證期間輸入了代碼。 – kanchan 2012-03-29 12:37:33

+0

好的,那樣做。當用戶輸入代碼時,查看代碼在數據庫中生成的時間。從當前時間減去並與適當的秒數進行比較。或者,懶惰地將過期時間存儲在數據庫中。 – 2012-03-29 12:40:01

回答

4

我不會認爲這是一個日期和時間。我想它是即時。當您生成驗證碼時,請在「從現在起24小時」的時間內及時處理,並將其存儲。然後,只需在驗證驗證碼時檢查「當前即時」即可。

您可以使用System.currentTimeMillis()以毫秒爲單位獲取long值。 (這是自Unix時代開始的,但實際上這並不重要)。事實上,我建議你創建一種可用於確定當前時間的接口,其實現使用System.currentTimeMillis()Joda Time等效。這樣你可以更容易地單元測試你的代碼。

因此,採取當前的毫秒數,添加適當的持續時間(再次,以毫秒爲單位),這就是你的到期時刻。

+0

但我只是一個學生,我不知道如何增加時間或毫秒。你能幫我解決這個問題嗎?以及如何獲得24小時的毫秒數 – kanchan 2012-03-29 12:55:30

+1

@kanchan:我不會告訴你如何計算24小時內有多少毫秒 - 任何學生都應該能夠自己做到這一點。 (小提示:一秒鐘內有多少毫秒?一分鐘內有多少秒......從那裏開始工作。)一旦你明白了,只是將兩個「長」值加在一起的情況。 – 2012-03-29 12:56:28

+0

好的謝謝。現在我知道了 – kanchan 2012-03-29 12:57:44

1

http://docs.oracle.com/javase/7/docs/api/java/util/Date.html

後()和()之前,方法做ecactly你想要什麼。

+3

這裏真的不需要'日期'。只是「毫秒數」很容易存儲和比較... – 2012-03-29 12:37:06

+0

沒錯。該死的,我恨你:)。我會把它留在這裏作爲替代,但upvote去找你,ofc。順便說一句,從我的角度來看,從來沒有需要java.util.Date ... – 2012-03-29 12:38:30

1

Java Date類具有用於比較日期的before()和after()函數。

2

使用數據庫如my sql來存儲驗證碼。有一個名爲createdTime的字段。當用戶試圖驗證,從現在減去createdTime()來獲得小於24

迴應:日期減法

select something from someTable where createdTime >= date_sub(now(), interval 24 hour) 
+0

是我正在做同樣的事情。我有MySQL數據庫。但如何做時間的減法 – kanchan 2012-03-29 12:49:45

+0

在我的文章中看到了回覆。只需在我們的代碼中插入。 – kasavbere 2012-03-29 13:43:30

+0

隨時感謝您的回答 – kanchan 2012-03-29 14:40:10

1

您可以使用Calender對象 的beforeafter例如:

// initialize ur date here 
Date issueded = null; 

Calendar issuedDate = Calendar.getInstance(); 
issuedDate.setTime(issueded); 

Calendar expiredDate = Calendar.getInstance(); 
// minus 12 H 
expiredDate.add(Calendar.HOUR, -12); 
if(expiredDate.before(issuedDate)) { 
    // do ur thing 
} else { 
    // expired 
}