我想根據當前時間獲取15分鐘的時間範圍。根據當前時間獲取具體的15分鐘時間範圍
例如:
時限爲every 15 minutes
。
即12〜1分爲四個時限[ 12:00 to 12:15, 12:16 to 12:30, 1:31 to 12:45, 12:46 to 1:00]
如果當前時間是12:34
手段,我需要返回的期限爲12:31 to 12:45
有什麼事情,我們可以使用Java 8日期很容易做的,時間API?
我想根據當前時間獲取15分鐘的時間範圍。根據當前時間獲取具體的15分鐘時間範圍
例如:
時限爲every 15 minutes
。
即12〜1分爲四個時限[ 12:00 to 12:15, 12:16 to 12:30, 1:31 to 12:45, 12:46 to 1:00]
如果當前時間是12:34
手段,我需要返回的期限爲12:31 to 12:45
有什麼事情,我們可以使用Java 8日期很容易做的,時間API?
您可以創建一個TemporalAdjuster
,計算當前15分鐘時間段的結束時間,並通過刪除14分鐘來計算時間段的開始時間。
看起來是這樣的:
public static void main(String[] args) {
LocalTime t = LocalTime.of(12, 34);
LocalTime next15 = t.with(next15Minute());
System.out.println(next15.minusMinutes(14) + " - " + next15);
}
public static TemporalAdjuster next15Minute() {
return (temporal) -> {
int minute = temporal.get(ChronoField.MINUTE_OF_DAY);
int next15 = (minute/15 + 1) * 15;
return temporal.with(ChronoField.NANO_OF_DAY, 0).plus(next15, ChronoUnit.MINUTES);
};
}
其輸出12:31 - 12-45
。
注意:我不確定它是如何在DST更改周圍發生的 - 要進行測試。
您可以簡單地使用Date API並計算間隔。 用你的間隔(15分鐘)分開再乘。這將刪除分鐘和四分鐘到較低的15分鐘間隔。現在你必須增加十五分鐘來獲得你需要的輸出。請看下面的代碼:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
long ms = new Date().getTime();
System.out.println("Current time: " + new Date().toString());
long fifteen = 15 * 60 * 1000;
long newMs = (ms/fifteen) * fifteen + fifteen;
System.out.println("Calculated time: " + new Date(newMs));
}
}
編輯:
Running example與LOCALDATE的
import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.*;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
LocalTime now = LocalTime.now();
System.out.println(now);
LocalTime next = now.with((temp) -> {
int currentMinute = temp.get(ChronoField.MINUTE_OF_DAY);
int interval = (currentMinute/15) * 15 + 15;
temp = temp.with(ChronoField.SECOND_OF_MINUTE, 0);
temp = temp.with(ChronoField.MILLI_OF_SECOND, 0);
return temp.with(ChronoField.MINUTE_OF_DAY, interval);
});
System.out.println(next);
}
}
提問者詢問Java 8日期和時間API。我也認爲最好使用這個而不是java.util.Date和長算術。 –
@ OleV.V。,我同意使用LocalDate,但算術更容易。 (請注意,這可能會更清晰) – AxelH
@AxelH,感謝您一直有見識的輸入。我發現以毫秒爲單位來讀取算術更方便,更容易(當然,您不需要同意)。當然需要一些算術。 –
好笑,這個[問題](http://stackoverflow.com/q/41438768/4391450)最近很接近。家庭作業 ? – AxelH