2 回答

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

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