在java中如何将时间舍入到最接近的15分钟
我的程序需要计算工人的加班时间,以便计算工资。为此,我现在要做的是让员工的时钟按时下班,然后根据公司的时间刻度计算每个员工加班的时间。我需要将这些时间四舍五入到最接近的15分钟,因此我需要一节课来通过小时数并返回四舍五入的小时数 例如:在java中如何将时间舍入到最接近的15分钟,java,time,rounding,Java,Time,Rounding,我的程序需要计算工人的加班时间,以便计算工资。为此,我现在要做的是让员工的时钟按时下班,然后根据公司的时间刻度计算每个员工加班的时间。我需要将这些时间四舍五入到最接近的15分钟,因此我需要一节课来通过小时数并返回四舍五入的小时数 例如: 如果加班时间为2.17小时,则必须四舍五入至2.15小时 如果加班时间为2.24小时,则必须四舍五入至2.30小时 如果加班时间为2.40小时,则必须为2.45小时 如果加班时间为2.56小时,则必须为3小时 公共字符串最长15分钟(长时间){ long mi
- 如果加班时间为2.17小时,则必须四舍五入至2.15小时
- 如果加班时间为2.24小时,则必须四舍五入至2.30小时
- 如果加班时间为2.40小时,则必须为2.45小时
- 如果加班时间为2.56小时,则必须为3小时
公共字符串最长15分钟(长时间){
}long milsec=时间; System.out.println(“毫秒:+milsec”); 长秒=时间/1000; ValidateValues.roundupDouble(秒); System.out.println(“第二个:“+sec”); 双分钟=秒/60; ValidateValues.roundupDouble(最小值); System.out.println(“miniutes:+min”); 双小时=分钟/60; 系统输出打印项次(“小时数:+hrs”); double roundeVal=ValidateValues.roundupDouble(小时); 字符串hrsvalue=String.valueOf(roundeVal); System.out.println(HRS值); 字符串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]); 如果(拆分值27?(15):(0); 返回拆分值1+“+”四舍五入; } 如果(分割值2>15&&splitedValue2 22?(30):(15); 返回拆分值1+“+”四舍五入; } 如果(分割值2>30&&splitedValue2 37?(45):(30); 返回拆分值1+“+”四舍五入; } 如果(分割值2>45&&splitedValue2 51?(00):(45); 如果(四舍五入==00){ splitedValue1++; 返回拆分值1+“+”四舍五入; }否则{ 返回拆分值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; //return rounded minutes
}
这里我假设大于或等于8的数字接近15。使用当前
日期的示例
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());
}
}
嗯,用模运算进行舍入很容易
在这里,您需要轮到15分钟
使用以毫秒为单位的历元时间,只需删除剩余的模运算,如下所示:
long l = System.currentTimeMillis();
l -= l % (15*60*1000);
System.out.println(new Date(System.currentTimeMillis()));
System.out.println(new Date(l));
2017年1月3日星期二09:35:56 CET
2017年1月3日星期二09:30:00 CET
15*60*1000
只是15分钟内的毫秒数
如果需要,您只需检查余数的值以添加15分钟。
因此,只需存储剩余部分:
long r = l % (15*60*1000);
然后将其减去当前时间
l -= r;
并检查分钟数(取决于您真正想要的精度)
if( r / 60_000 >= 8)
l += 15*60*1000;
如果季度从8分钟后结束(如果这在英语中真的意味着什么;),则此项将结束)
完整代码:
long l = System.currentTimeMillis();
long r = l % (15*60*1000);
l -= r;
if( r / 60_000 >= 8)
l += 15*60*1000;
我使用了一些计算,但没有计算。什么是“时间实例”在这里使用,long epoch
,Date
,LocalDate
,Calendar
,…取整通常是用模运算符完成的。显示您所拥有的,为了帮助您完成这一部分,这是我现在使用的类,我不会单击该链接,用代码中有趣的部分编辑您的问题。不需要完整的项目,只需要你试图将时间四舍五入到季度的方法。整理、格式化和更正英语。那就是使用Calendar
而不是Date
,使用Date
,你应该做一个timeInMilli-(timeInMilli%(15*60*1000))
我想。PS:Calendar.getInstance()
已经在做一个新日期()
因此无需再次执行;)
if( r / 60_000 >= 8)
l += 15*60*1000;
long l = System.currentTimeMillis();
long r = l % (15*60*1000);
l -= r;
if( r / 60_000 >= 8)
l += 15*60*1000;