public class Timer {
private final long start;
private final long period;
private long end;
public Timer(long period) {
this.period = period;
this.start = System.currentTimeMillis();
this.end = (this.start + period);
}
public long getElapsed()
{
return System.currentTimeMillis() - this.start;
}
public long getRemaining() {
if (isRunning()) {
return this.end - System.currentTimeMillis();
}
return 0L;
}
public boolean isRunning()
{
return System.currentTimeMillis() < this.end;
}
public void reset()
{
this.end = (System.currentTimeMillis() + this.period);
}
public long setEndIn(long ms) {
this.end = (System.currentTimeMillis() + ms);
return this.end;
}
public String toElapsedString()
{
return Time.format(getElapsed());
}
public String toRemainingString()
{
return Time.format(getRemaining());
}
}
public class Time {
public static String format(long time) {
StringBuilder t = new StringBuilder();
long total_secs = time / 1000L;
long total_mins = total_secs / 60L;
long total_hrs = total_mins / 60L;
long total_days = total_hrs / 24L;
int secs = (int)total_secs % 60;
int mins = (int)total_mins % 60;
int hrs = (int)total_hrs % 24;
int days = (int)total_days;
if (days > 0) {
if (days < 10) {
t.append("0");
}
t.append(days);
t.append(":");
}
if (hrs < 10) {
t.append("0");
}
t.append(hrs);
t.append(":");
if (mins < 10) {
t.append("0");
}
t.append(mins);
t.append(":");
if (secs < 10) {
t.append("0");
}
t.append(secs);
return t.toString();
}
}