-1

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

現在、このコードを使用してミリ秒値を丸めています。この方法では、コードの冗長性が大きな問題になります。

これを計算するためのより良い解決策または数式はありますか?

4

4 に答える 4

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();
}
于 2013-04-08T14:02:06.493 に答える
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内にorreturnステートメントがないことに注意してくださいswitchswitchこれにより、ブロック内のステートメントが次のラベルにフォールスルーします。case

これはチュートリアルでカバーされています。

于 2013-04-08T14:02:40.453 に答える
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();

}
于 2013-04-08T14:04:34.193 に答える
0

だけでcalender.set(Calendar.MILLISECOND, 0)十分じゃない?

これを行う別の方法は次のとおりです。

return date.getTime() / 1000 * 1000;
于 2013-04-08T14:02:43.540 に答える