Java代码
public static long round(long millis , TimeUnit unit){
Calendar calendar = Calendar.getInstance();
switch(unit){
case DAYS:
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR, 0);
return calendar.getTimeInMillis();
case HOURS:
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
return calendar.getTimeInMillis();
case MINUTES:
calendar.set(Calendar.MILLISECOND , 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTimeInMillis();
case SECONDS:
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
case MILLISECONDS:
default:
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
}
目前,我正在使用此代码来舍入毫秒值。在这种方法中,代码的冗余是一个大问题。
有没有更好的解决方案或数学公式来计算它?
答案 0 :(得分:3)
您可以通过利用 fall through 来消除所有重复的行:
public static long round(long millis , TimeUnit unit){
Calendar calendar = Calendar.getInstance();
switch(unit){
case DAYS:
calendar.set(Calendar.HOUR, 0);
case HOURS:
calendar.set(Calendar.MINUTE, 0);
case MINUTES:
calendar.set(Calendar.SECOND, 0);
case SECONDS:
case MILLISECONDS:
default:
calendar.set(Calendar.MILLISECOND, 0);
}
return calendar.getTimeInMillis();
}
答案 1 :(得分:1)
public static long round(long millis , TimeUnit unit){
Calendar calendar = Calendar.getInstance();
switch(unit){
case DAYS:
calendar.set(Calendar.HOUR, 0);
case HOURS:
calendar.set(Calendar.MINUTE, 0);
case MINUTES:
calendar.set(Calendar.SECOND, 0);
default:
calendar.set(Calendar.MILLISECOND, 0);
}
return calendar.getTimeInMillis();
}
请注意break
内没有return
或switch
语句。这会导致switch
块中的语句通过落到下一个case
标签。
答案 2 :(得分:0)
是不是只有calender.set(Calendar.MILLISECOND, 0)
?
另一种方法是:
return date.getTime() / 1000 * 1000;
答案 3 :(得分:0)
您可以在switch语句中利用'fallthrough':
public static long round(long millis , TimeUnit unit){
Calendar calendar = Calendar.getInstance();
switch(unit){
case DAYS:
calendar.set(Calendar.HOUR, 0);
case HOURS:
calendar.set(Calendar.MINUTE, 0);
case MINUTES:
calendar.set(Calendar.SECOND, 0);
case SECONDS:
calendar.set(Calendar.MILLISECOND, 0);
}
return calendar.getTimeInMillis();
}