// mixed base time conversion

// In JDK 1.5+ these sorts of calculations can often be done more easily with java.util.concurrent.TimeUnit.html

// Take apart milliseconds into days, hours, minutes, seconds, ms, working left to right.

// Time in ms since 1970-01-01 00:00 UTC

final long timeInMillis = System.currentTimeMillis();

final int days = (int) ( timeInMillis / ( 24L * 60 * 60 * 1000 ) );

int remdr = (int) ( timeInMillis % ( 24L * 60 * 60 * 1000 ) );

final int hours = remdr / ( 60 * 60 * 1000 );

remdr %= 60 * 60 * 1000;

final int minutes = remdr / ( 60 * 1000 );

remdr %= 60 * 1000;

final int seconds = remdr / 1000;

final int ms = remdr % 1000;

// convert days, hours, minutes, seconds, ms back into millseconds

final long timeInMillis = days * ( 24L * 60 * 60 * 1000 ) + hours * ( 60 * 60 * 1000 ) + minutes * ( 60 * 1000 ) + seconds * 1000 + ms;

// alternate way to split time, working right to left.
// Uses long arithmetic throughout, so it is slower, but it has simpler literals.

final long timeInMillis = System.currentTimeMillis();

long remdr = timeInMillis;

final int ms = (int)( remdr % 1000 );

remdr /= 1000;

final int seconds = (int)( remdr % 60 );

remdr /= 60;

final int minutes = (int)( remdr % 60 );

remdr /= 60;

final int hours = (int)( remdr % 24 );

final int days = (int)( remdr / 24 );