我想根据当前时间获取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