如何在java中转一毫秒?

时间:2013-04-08 14:00:10

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

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

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

4 个答案:

答案 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内没有returnswitch语句。这会导致switch块中的语句通过落到下一个case标签。

tutorial

中介绍了这一点

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

}
相关问题