Поддержка того, что вы хотите сделать, встроена в последние JDK с малоизвестным классом под названием TimeUnit
.
. То, что вы хотите использовать, это java.util.concurrent.TimeUnit для работы с интервалами .
SimpleDateFormat
делает только то, что звучит так, как он это делает, он форматирует экземпляры java.util.Date
, или в вашем случае он конвертирует значение long
в контекст java.util.Date
и незнать, что делать с интервалами , с которыми вы, очевидно, работаете.
Вы можете легко сделать это, не прибегая к внешним библиотекам, таким как JodaTime.
import java.util.concurrent.TimeUnit;
public class Main
{
private static String formatInterval(final long l)
{
final long hr = TimeUnit.MILLISECONDS.toHours(l);
final long min = TimeUnit.MILLISECONDS.toMinutes(l - TimeUnit.HOURS.toMillis(hr));
final long sec = TimeUnit.MILLISECONDS.toSeconds(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min));
final long ms = TimeUnit.MILLISECONDS.toMillis(l - TimeUnit.HOURS.toMillis(hr) - TimeUnit.MINUTES.toMillis(min) - TimeUnit.SECONDS.toMillis(sec));
return String.format("%02d:%02d:%02d.%03d", hr, min, sec, ms);
}
public static void main(final String[] args)
{
System.out.println(formatInterval(Long.parseLong(args[0])));
}
}
Вывод будет отформатирован примерно так
13:00:00.000