2 回答

TA貢獻1752條經驗 獲得超4個贊
您的問題令人困惑,不清楚您的業務邏輯的確切細節。但這應該讓你指向正確的方向。
Instant .ofEpochSecond(?…?) .minus( ????Duration ????.ofHours(?3?)? ) .isBefore(? ????Instant.now() )
java.time
我們有這方面的課程。不要推出自己的日期時間解決方案。
Instant
獲取 UTC 的當前時刻。
Instant?now?=?Instant.now()?;
Duration
將您的等待時間指定為Duration
,一個未附加到時間線的時間跨度。
Duration?d?=?Duration.ofHours(?3?)?;
指定您的開始時間。你沒有解釋,但顯然開始時刻是自 UTC 1970 年第一時刻 1970-01-01T00:00Z 的紀元參考以來的整秒數。將該數字粘貼為Instant
.
Instant?start?=?Instant.ofEpochSecond(?10_800_000L?)?;
添加我們的持續時間以確定我們的目標時刻。
Instant?limit?=?start.plus(?d?)?;
與當前時刻進行比較。
Boolean?pastLimit?=?now.isAfter(?limit?)?;
提示:不要將時間作為單純的整數來跟蹤。這樣做會造成混淆并容易出錯,使調試變得困難。使用適當的數據類型。在您的代碼周圍傳遞Instant
對象,而不是秒數。
Interval
或者,使用額外的庫變得更有趣。
將ThreeTen-Extra庫添加到您的項目中。我們希望使用表示Interval
附加到時間軸的時間跨度的類作為一對Instant
對象。
將持續時間添加到開始then
時刻。
Interval?interval?=?Interval.of(?then?,?then.plus(?d?)?;
測試當前時刻是否在該時間間隔內。
Boolean?nowInInterval?=?interval.contains(?now?)?;

TA貢獻1871條經驗 獲得超13個贊
1000 milliseconds/second
60 seconds/minute
60 minutes/hour
3 hours
將它們相乘,得到 10,800,000 毫秒。第一步,你的號碼是正確的。
下一步,計算數字是否在范圍內:
如果 timeTesting 在距現在 3 小時的范圍內,則 timeNow <= timeTesting <= timeNow + 10,800,000 毫秒。
第二步,您的范圍測試不正確。
用以下方法修復它:
public static Boolean checkIfWithin3Hours(long startTime, long currentTime){
return startTime <= currentTime && currentTime <= startTime + 10800000;
}
添加回答
舉報