2013-04-08 2 views
-1

Java CodeКак раунд миллисекунды в 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
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.

Это покрытие находится в tutorial.

0

Не только calender.set(Calendar.MILLISECOND, 0) достаточный?

Другим способом сделать это было бы:

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

Вы можете воспользоваться 'проваливается' в операторе переключателя:

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

} 
Смежные вопросы