2013-04-08 99 views
-1

Java代码的如何在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(); 
    } 
} 

目前,我正在使用此代码一轮毫秒值。在这种方法中,代码冗余是一个大问题。

有没有更好的解决方案或数学公式来计算?

回答

3

您可以通过这样消除所有重复行通过利用下降:

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
​​

注缺少的switchbreakreturn语句。这导致switch块中的语句到经过到下一个case标签。

这涵盖在tutorial

0

是不是只有calender.set(Calendar.MILLISECOND, 0)足够?

另一种方式来做到这一点是:

return date.getTime()/1000 * 1000; 
0

您可以在switch语句采取 '下通' 的优势:

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(); 

}