import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
class TimeFormatter {
private NavigableMap
<Long,String
> timeUnits
= new TreeMap
<>();
public TimeFormatter() {
timeUnits.
put(Long.
MIN_VALUE,
" is not a valid argument"); timeUnits.put(TimeUnit.SECONDS.toSeconds(1), " seconds");
timeUnits.put(TimeUnit.MINUTES.toSeconds(1), " minutes");
timeUnits.put(TimeUnit.HOURS.toSeconds(1), " hours");
timeUnits.put(TimeUnit.DAYS.toSeconds(1), " days");
timeUnits.put(TimeUnit.DAYS.toSeconds(365), " years");
timeUnits.put(TimeUnit.DAYS.toSeconds(365 * 1000000L), " million years");
timeUnits.put(TimeUnit.DAYS.toSeconds(365 * 1000000L * 1000), " billion years");
}
public String format
(long milliseconds
) { Map.
Entry<Long,String
> unitBelow
= timeUnits.
floorEntry(milliseconds
);
int time = (int) (milliseconds / unitBelow.getKey());
String formatted
= time
+ unitBelow.
getValue();
if(time == 1) formatted = formatted.substring(0, formatted.length()-1); //Remove plural
return formatted;
}
}
public class Main {
public static void main
(String args
[]) { TimeFormatter test = new TimeFormatter();
System.
out.
println(test.
format(60 * 60 * 24 * 365 * 1000000L
)); }
}
aW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBqYXZhLnV0aWwuTmF2aWdhYmxlTWFwOwppbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKCmNsYXNzIFRpbWVGb3JtYXR0ZXIgewoKICAgIHByaXZhdGUgTmF2aWdhYmxlTWFwPExvbmcsU3RyaW5nPiB0aW1lVW5pdHMgPSBuZXcgVHJlZU1hcDw+KCk7CgogICAgcHVibGljIFRpbWVGb3JtYXR0ZXIoKSB7CiAgICAgICAgdGltZVVuaXRzLnB1dChMb25nLk1JTl9WQUxVRSwgIiBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCIpOwogICAgICAgIHRpbWVVbml0cy5wdXQoVGltZVVuaXQuU0VDT05EUy50b1NlY29uZHMoMSksICIgc2Vjb25kcyIpOwogICAgICAgIHRpbWVVbml0cy5wdXQoVGltZVVuaXQuTUlOVVRFUy50b1NlY29uZHMoMSksICIgbWludXRlcyIpOwogICAgICAgIHRpbWVVbml0cy5wdXQoVGltZVVuaXQuSE9VUlMudG9TZWNvbmRzKDEpLCAiIGhvdXJzIik7CiAgICAgICAgdGltZVVuaXRzLnB1dChUaW1lVW5pdC5EQVlTLnRvU2Vjb25kcygxKSwgIiBkYXlzIik7CiAgICAgICAgdGltZVVuaXRzLnB1dChUaW1lVW5pdC5EQVlTLnRvU2Vjb25kcygzNjUpLCAiIHllYXJzIik7CiAgICAgICAgdGltZVVuaXRzLnB1dChUaW1lVW5pdC5EQVlTLnRvU2Vjb25kcygzNjUgKiAxMDAwMDAwTCksICIgbWlsbGlvbiB5ZWFycyIpOwogICAgICAgIHRpbWVVbml0cy5wdXQoVGltZVVuaXQuREFZUy50b1NlY29uZHMoMzY1ICogMTAwMDAwMEwgKiAxMDAwKSwgIiBiaWxsaW9uIHllYXJzIik7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBmb3JtYXQobG9uZyBtaWxsaXNlY29uZHMpIHsKICAgICAgICBNYXAuRW50cnk8TG9uZyxTdHJpbmc+IHVuaXRCZWxvdyA9IHRpbWVVbml0cy5mbG9vckVudHJ5KG1pbGxpc2Vjb25kcyk7CgogICAgICAgIGludCB0aW1lID0gKGludCkgKG1pbGxpc2Vjb25kcyAvIHVuaXRCZWxvdy5nZXRLZXkoKSk7CiAgICAgICAgU3RyaW5nIGZvcm1hdHRlZCA9IHRpbWUgKyB1bml0QmVsb3cuZ2V0VmFsdWUoKTsKCiAgICAgICAgaWYodGltZSA9PSAxKSBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQuc3Vic3RyaW5nKDAsIGZvcm1hdHRlZC5sZW5ndGgoKS0xKTsgLy9SZW1vdmUgcGx1cmFsCgogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBNYWluIHsKIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAlUaW1lRm9ybWF0dGVyIHRlc3QgPSBuZXcgVGltZUZvcm1hdHRlcigpOwogCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0LmZvcm1hdCg2MCAqIDYwICogMjQgKiAzNjUgKiAxMDAwMDAwTCkpOwogfQp9Cgo=