Кратчайшее решение:
Вот, вероятно, самый короткий, который также касается часовых поясов.
System.out.printf("%tT", millis-TimeZone.getDefault().getRawOffset());
Какие выходы например:
00:18:32
Пояснение:
%tT
- это время, отформатированное для 24-часовых часов как %tH:%tM:%tS
.
%tT
также принимает длинные как входные данные, поэтому нет необходимости создавать Date
. printf()
просто выведет время, указанное в миллисекундах, но в текущем часовом поясе, поэтому мы должны вычесть необработанное смещение текущего часового пояса, так что 0 миллисекунд будут равны 0 часам, а не значение смещения времени текущего часового пояса .
Примечание # 1: Если вам нужен результат как String
, вы можете получить его так:
String t = String.format("%tT", millis-TimeZone.getDefault().getRawOffset());
Примечание # 2: Это дает правильный результат, только если millis
меньше дня, потому что часть дня не включена в выходные данные.