Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 627
lock Avatar asked Aug 24 '10 06:08

lock


People also ask

How to round hour in java?

long timeMs = System. System. currentTimeMillis(); long roundedtimeMs = Math. round( (double)( (double)timeMs/(double)(15*60*1000) ) ) * (15*60*1000) );


1 Answers

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); 
like image 50
Sean Patrick Floyd Avatar answered Sep 18 '22 11:09

Sean Patrick Floyd