我的计划需要计算工人的加班时间以进行工资计算。为此,我现在正在做的是获得工人的时间和时间,然后我用公司的时间表来计算并计算每个工人加班的时间。我需要将这些时间缩短到最近的15分钟,所以我需要一个班级来传递时间并返回四舍五入的时间。
例如:
如果加班时间为2.56小时,则必须为3小时。
public String RoundToNearest15Min(长时间){
long milsec = Time;
System.out.println("milsecond :" + milsec);
long sec = Time / 1000;
ValidateValues.roundupDouble(sec);
System.out.println("second :" + sec);
double min = sec / 60;
ValidateValues.roundupDouble(min);
System.out.println("miniutes :" + min);
double hrs = min / 60;
System.out.println("hours :" + hrs);
double roundeVal = ValidateValues.roundupDouble(hrs);
String hrsvalue = String.valueOf(roundeVal);
System.out.println(hrsvalue);
String splitVal[] = hrsvalue.split("\\.");
System.out.println(splitVal[0]);
System.out.println(splitVal[1]);
int splitedValue2 = Integer.parseInt(splitVal[1]);
int splitedValue1 = Integer.parseInt(splitVal[0]);
if (splitedValue2 <= 15) {
int rounded = splitedValue2 > 7 ? (15) : (0);
return splitedValue1 + "." + rounded;
}
if (splitedValue2 > 15 && splitedValue2 <= 30) {
int rounded = splitedValue2 > 22 ? (30) : (15);
return splitedValue1 + "." + rounded;
}
if (splitedValue2 > 30 && splitedValue2 <= 45) {
int rounded = splitedValue2 > 37 ? (45) : (30);
return splitedValue1 + "." + rounded;
}
if (splitedValue2 > 45 && splitedValue2 <= 59) {
int rounded = splitedValue2 > 51 ? (00) : (45);
if (rounded == 00) {
splitedValue1++;
return splitedValue1 + "." + rounded;
} else {
return splitedValue1 + "." + rounded;
}
}
return "";
}
答案 0 :(得分:1)
如果您只是从时间中提取分钟并将其传递给此函数:
public static int getNear15Minute(int minutes){
int mod = minutes%15;
int res = 0 ;
if((mod) >=8){
res = minutes+(15 - mod);
}else{
res = minutes-mod;
}
return (res%60);
}
这里我假设大于或等于8的数字接近15。
答案 1 :(得分:0)
使用当前Date
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int round = calendar.get(Calendar.MINUTE) % 15;
calendar.add(Calendar.MINUTE, round < 8 ? -round : (15-round));
calendar.set( Calendar.SECOND, 0 );
System.out.println(calendar.getTime());
}
}
测试
Tue Jan 03 09:15:00 CET 2017
答案 2 :(得分:0)
好吧,使用模运算可以很容易地进行舍入。
在这里你想要回合15分钟。
使用以毫秒为单位的纪元时间,您只需要删除模运算的其余部分,如下所示:
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="img/main.jpg" alt="Image">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="img/main2.jpg" alt="Image">
<div class="carousel-caption">
</div>
</div>
</div>
</div>
2017年1月3日星期二09:35:56
2017年1月3日星期二09:30:00 CET
long l = System.currentTimeMillis();
l -= l % (15*60*1000);
System.out.println(new Date(System.currentTimeMillis()));
System.out.println(new Date(l));
只是15分钟内的毫秒数
如果需要,您只需要检查余数的值,即可添加15分钟。 所以只需存储余数:
15*60*1000
然后将其减去当前时间
long r = l % (15*60*1000);
并检查分钟数(取决于你真正想要的精度。
l -= r;
如果季度从8分钟过去(如果这真的意味着英语中的任何内容),这将会四舍五入。)
完整代码:
if( r / 60_000 >= 8)
l += 15*60*1000;