我需要知道一個日期是否與一個周期相匹配,例如,周期是1小時,而用戶給出的日期是13/09/2021 23:00,我的java代碼應該是13/09/2021 00:00,并檢查要加多少次1小時才能得到日期13/09/2021 23:00。
現在的想法是做一個回圈,把1小時加到日期上并保存在一個陣列中,然后檢查日期是否在陣列內和位置。還有什么其他的方法嗎?
uj5u.com熱心網友回復:
如果我正確理解你的問題,你只是想計算兩個日期之間有多少個小時。對于這一點,使用內置的java.time類會更干凈。你可以將兩個日期讀成LocalDateTime物件,然后用ChronoUnit.HOURS計算它們之間的時間跨度:
DateTimeFormatter formatter = DateTimeFormatter. ofPattern("dd/MM/yyyy HH:mm") 。
LocalDateTime start = LocalDateTime.parse("13/09/2021 00:00"/span>, formatter)。
LocalDateTime end = LocalDateTime.parse("13/09/2021 23:00", formatter)。
long hours = ChronoUnit.HOURS.between(start, end)。
結果將是23。
對于其他各種單位(例如分鐘),有ChronoUnit.MINUTES。請看一下檔案。有很多不同的單位可供選擇。
uj5u.com熱心網友回復:
與QBrute的正確答案相比,我增加了幾個小的改進。
周期可以是以小時、分鐘和秒為單位的任何時間量。
我將時區考慮在內,所以我們在夏季的時間轉換(春季向前和秋季向后)和其他時間例外情況下也能得到正確結果。
如果沒有整數的周期性,我將四舍五入,以確保至少有足夠的周期性。
ZoneId userTimeZone = ZoneId. of("Africa/Dar_es_Salaam")。 Duration periodicity = Duration.ofMinutes(5)。 ZonedDateTime userTime = ZonedDateTime。 of(2021, 9, 13, 23, 0, 0, 0, userTimeZone)。) ZonedDateTime initialTime = ZonedDateTime. of(2021, 9, 13, 0, 0, 0, 0, userTimeZone)。) Duration timeBetween = Duration.between(initialTime, userTime)。 long numberOfPeriodicities = timeBetween.dividBy(periodicity); //span>是否發生截斷? if (initialTime.plus(periodicity.multipliedBy(numberOfPeriodicities)).isBefore(userTime) ) { //需要多一個周期性。 numberOfPeriodicities ; } System.out.println(numberOfPeriodicities)。
輸出是:
276
如果你想要一個7.5分鐘的周期,指定 鏈接。Oracle 教程。日期時間,解釋如何使用java.time.
標籤:Duration.ofMinutes(7).plusSeconds(30)/code>。我所使用的Duration.dividedBy(Duration)方法是在Java 9中引入的。
