Java 整数时间间隔
这个问题更像是一道数学题(对不起,我数学不好) 我将时间表示为整数 比如说Java 整数时间间隔,java,math,time,Java,Math,Time,这个问题更像是一道数学题(对不起,我数学不好) 我将时间表示为整数 比如说 700 (means 7:00) 1330 (means 13:30) 2359 (means 23:59) 我有一个开始时间和结束时间,并希望在它们之间创建15分钟的间隔。比如说 int start = 700; int end = 1300; 我想循环开始时间,增加15分钟,然后跳过60到下一个100分钟。例如,700、715、730、745、800、815、830。。等等 我可以通过创建一个Calendar
700 (means 7:00)
1330 (means 13:30)
2359 (means 23:59)
我有一个开始时间和结束时间,并希望在它们之间创建15分钟的间隔。比如说
int start = 700;
int end = 1300;
我想循环开始时间,增加15分钟,然后跳过60到下一个100分钟。例如,700、715、730、745、800、815、830。。等等
我可以通过创建一个Calendar
对象来创建它,并将整数解析为SimpleDateFormat
,将时间添加到日历中,增加分钟数,然后将小时数和分钟数解析回整数。但是它太长了,所以应该有一个简单的数学方法来更有效地执行它。使用这个类。这有一个plusMinutes方法,您可以使用它将基本时间增加15分钟
也许像
LocalTime baseTime = LocalTime.of(((int)myNumber/100),myNumber%100);
while(...){
LocalTime myTime=baseTime.plusMinutes(15);
}
使用该类。这有一个plusMinutes方法,您可以使用它将基本时间增加15分钟
也许像
LocalTime baseTime = LocalTime.of(((int)myNumber/100),myNumber%100);
while(...){
LocalTime myTime=baseTime.plusMinutes(15);
}
要将“整数编码”时间转换为分钟,请执行以下操作:
int encoded = 2359;
int minutes = (encoded / 100) * 60 + encoded % 100;
有分钟后,可以添加分钟或毫秒:
long milliseconds = minutes * 3_600_000L;
要将“整数编码”时间转换为分钟,请执行以下操作:
int encoded = 2359;
int minutes = (encoded / 100) * 60 + encoded % 100;
有分钟后,可以添加分钟或毫秒:
long milliseconds = minutes * 3_600_000L;
如果必须使用整数,或者决定使用整数,则可以创建一个方法“plusMinutes”,如: 另一种选择(我认为更好)是创建一个方法“toMinutes”和一个方法“toEncoded”,如: 注意:无法100%确定代码是否有效,尚未测试,但您应该了解总体思路 编辑:对于使用最后一个选项时出现的问题,您只需执行以下操作:
int encoded = 1330;
int plusMinutes = 45;
int minutes = toMinutes(encoded);
minutes += plusMinutes;
encoded = toEncoded(minutes);
如果必须使用整数,或者决定使用整数,则可以创建一个方法“plusMinutes”,如: 另一种选择(我认为更好)是创建一个方法“toMinutes”和一个方法“toEncoded”,如: 注意:无法100%确定代码是否有效,尚未测试,但您应该了解总体思路 编辑:对于使用最后一个选项时出现的问题,您只需执行以下操作:
int encoded = 1330;
int plusMinutes = 45;
int minutes = toMinutes(encoded);
minutes += plusMinutes;
encoded = toEncoded(minutes);
已经有了相当好的答案 从API的角度来看,您应该使用user1717259建议的日期和时间API,它为“计算”时间提供了最佳选项。这将产生最自我解释和可维护的代码 对于从时间编码int开始计算分钟和小时,也有很好的建议 如果使用
int
s是一种约束,并且您只想计算给定起始值和间隔的下一个int,那么以下函数可能会有所帮助
int inc(int currentTime, int interval) {
return (((currentTime +interval) / 100) + ((currentTime+interval) % 100 / 60)) * 100 + ((currentTime+interval) % 100 % 60);
}
解释的功能包括:
是您的间隔增加,也可以用单独调用currentTime+interval
替换currentTime+=interval
将为您提供小时(当前时间+间隔)/100)
将为您获取((当前时间+间隔)%100/60))
或0
如果您超过一小时1
将小时值重新计算为hh00格式*100
将计算与小时重叠的分钟数,((当前时间+间隔)%100%60)
将计算分钟数,%100
将计算小时数上的分钟数,并将其添加到新的小时值中%60
for(int i = 700; i <= 1300; i = inc(i, 15)){
System.out.println(i);
}
对于(inti=700;i已经有了相当好的答案
从API的角度来看,您应该使用user1717259建议的日期和时间API,它为“计算”时间提供了最佳选项。这将生成最自我解释和可维护的代码
对于从时间编码int开始计算分钟和小时,也有很好的建议
如果使用int
s是一种约束,并且您只想计算给定起始值和间隔的下一个int,那么以下函数可能会有所帮助
int inc(int currentTime, int interval) {
return (((currentTime +interval) / 100) + ((currentTime+interval) % 100 / 60)) * 100 + ((currentTime+interval) % 100 % 60);
}
解释的功能包括:
currentTime+interval
是您的时间间隔增加,也可以在之前单独调用currentTime+=interval
(当前时间+间隔)/100)
将为您提供小时
((当前时间+间隔)%100/60))
将为您获取0
或1
如果您超过一小时
*100
将小时值重新计算为hh00格式
((当前时间+间隔)%100%60)
将计算与小时重叠的分钟数,%100
将计算分钟数,%60
将计算小时数上的分钟数,并将其添加到新的小时值中
您可以使用
for(int i = 700; i <= 1300; i = inc(i, 15)){
System.out.println(i);
}
对于(inti=700;i这个神奇公式是((j=i%100+15)%60)+((i/100+j/60)*100)
这个神奇的公式是((j=i%100+15)%60)+((i/100+j/60)*100)
谢谢,这是我想要的方式。添加分钟并转换回EncodedHanks,这是我想要的方式。添加分钟并转换回encodedImpressive,一个单一公式!很棒的工作令人印象深刻,一个单一公式!很棒的工作