How to round time to the nearest quarter hour in java?

后端 未结 14 2668
小鲜肉
小鲜肉 2020-11-27 14:59

Given today\'s time e.g. 2:24PM, how do I get it to round to 2:30PM?

Similarly if the time was 2:17PM, how do I get it to round to 2:15PM?

14条回答
  •  醉梦人生
    2020-11-27 15:16

    Rounding

    You will need to use modulo to truncate the quarter hour:

    Date whateverDateYouWant = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(whateverDateYouWant);
    
    int unroundedMinutes = calendar.get(Calendar.MINUTE);
    int mod = unroundedMinutes % 15;
    calendar.add(Calendar.MINUTE, mod < 8 ? -mod : (15-mod));
    

    As pointed out by EJP, this is also OK (replacement for the last line, only valid if the calendar is lenient):

    calendar.set(Calendar.MINUTE, unroundedMinutes + mod);
    

    Improvements

    If you want to be exact, you will also have to truncate the smaller fields:

    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    

    You can also use DateUtils.truncate() from Apache Commons / Lang to do this:

    calendar = DateUtils.truncate(calendar, Calendar.MINUTE);
    

提交回复
热议问题