This algorithm is pretty popular, but in some cases i do get some conflict with TimeUnit results.
long millis = 12884983;
System.out.println(((millis / (1000 * 60)) % 60));
System.out.println(java.util.concurrent.TimeUnit.MILLISECONDS.toMinutes(millis));
Prints:
34
214