在30分钟(最近的半小时)内递增:

时间:2014-11-22 20:21:43

标签: java datetime math routing

以30为增量舍入整数的最有效方式(在Java中)是什么。我的输出将是一个整数:

这是我的代码,以整数形式返回分钟。

long different = endTime.getTime() - startTime.getTime();
int idiff = TimeUnit.MILLISECONDS.toMinutes(different) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(different));

现在我要整理这个整数。例如:

  

任何数字< = 30 =向上舍入到30:

     

31到60之间的任何数字=最多60个

     

61到90之间的任何数字=向上舍入到90

     

91到120之间的任何数字=最多120个

     

121到150之间的任何数字=最多150个

2 个答案:

答案 0 :(得分:3)

添加一个比你想要的组少一个,然后除以和多个..所以30做

((value + 29) / 30) * 30

这假设您希望0保持0,30以保持30 ...

答案 1 :(得分:2)

这应该有效:

x = ((x+30)/30) * 30;

示例:

((15+30)/30)*30 == (45/30)*30 == 1*30 == 30
((30+30)/30)*30 == (60/30)*30 == 2*30 == 60
((47+30)/30)*30 == (77/30)*30 == 2*30 == 60
...

编辑:

OP改变了要求(30应保持30):

x = ((x+29)/30) * 30;

示例:

((15+29)/30)*30 == (44/30)*30 == 1*30 == 30
((30+29)/30)*30 == (59/30)*30 == 1*30 == 30
((47+29)/30)*30 == (76/30)*30 == 2*30 == 60
...